本文将从以下几个方面介绍R语言中的数据管理,1.数据处理函数 2.控制流 3.用户自定义函数 4.整合和重构

1.数据的处理函数

#实例
x<-c(1,2,3,4,5,6,7,8,9)
y<-mean(x)
#冗长的方式
n<-length(x)
#求均值
meanx<-sum(x)/n
#求标准差
css<-sum((x-meanx)^2)
sdx<-sqrt(css/(n-1))
print(sdx)
[1] 2.738613

概率函数:

#绘制正太分布曲线
x<-pretty(c(-3,3),30)
y<-dnorm(x)
plot(x,y,type="l",xlab="Normal Deviate",ylab="Density",yaxs="i")

#伪随机数
#生成服从正太分布的伪随机数
runif(5)
#手动设置种子,重现上上次的结果
set.seed(1234)
runif(5)
[1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154
set.seed(1234)
runif(5)
[1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154

在模拟研究和蒙特卡洛方法中,经常需要获取来自给定均值向量和协方差阵的多元正太分布的数据,MASS中mvrnorm()函数可以让这个问题变得容易:

library(MASS)
options(digits=3)
#设置随机数种子
set.seed(1234)
mean<-c(230.7,146.7,3.6)
#制定均值向量、协方差阵
sigma<-matrix(c(15360.8,6721.2,-47.1,6721.2,4700.9,-16.5,-47.1,-16.5,0.3),nrow=3,ncol=3)
#生成数据
mydata<-mvrnorm(500,mean,sigma)
mydata<-as.data.frame(mydata)
names(mydata)<-c("y","x1","x2")
#查看结果
dim(mydata)
head(mydata,n=10)
y    x1   x2
1   98.8  41.3 3.43
2  244.5 205.2 3.80
3  375.7 186.7 2.51
4  -59.2  11.2 4.71
5  313.0 111.0 3.45
6  288.8 185.1 2.72
7  134.8 165.0 4.39
8  171.7  97.4 3.64
9  167.2 101.0 3.50
10 121.1  94.5 4.10

字符处理函数:

a<-5
sqrt(a)
[1] 2.24
b<-c(1.243,5.654,2.99)
round(b)
[1] 1 6 3
c<-matrix(runif(12),nrow=3)
c
[,1]  [,2]  [,3]  [,4]
[1,] 0.9636 0.216 0.289 0.913
[2,] 0.2068 0.240 0.804 0.353
[3,] 0.0862 0.197 0.378 0.931
log(c)
[,1]  [,2]   [,3]    [,4]
[1,] -0.0371 -1.53 -1.241 -0.0912
[2,] -1.5762 -1.43 -0.218 -1.0402
[3,] -2.4511 -1.62 -0.972 -0.0710
mean(c)
[1] 0.465
#apply()函数的应用
apply(x,MARGIN,FUN,……)
x为数据对象,margin是维度的下标,FUN为自己制定的函数
mydata<-matrix(rnorm(30),nrow=6)
mydata
[,1]   [,2]   [,3]   [,4]   [,5]
[1,]  0.459  1.203  1.234  0.591 -0.281
[2,] -1.261  0.769 -1.891 -0.435  0.812
[3,] -0.527  0.238 -0.223 -0.251 -0.208
[4,] -0.557 -1.415  0.768 -0.926  1.451
[5,] -0.374  2.934  0.388  1.087  0.841
[6,] -0.604  0.935  0.609 -1.944 -0.866
#计算每行的平均值
apply(mydata,1,mean)
[1]  0.641 -0.401 -0.194 -0.136  0.975 -0.374
#计算每列的平均值
apply(mydata,2, mean)
[1] -0.478  0.777  0.148 -0.313  0.292
#计算每行的结尾均值
apply(mydata,2,mean,trim=0.2)
[1] -0.516  0.786  0.386 -0.255  0.291

数据处理难题的解决方案:

#限定输出的小数点后的数字的位数为2
options(digits=2)
Student<-c("John Davis","Angela Williams","Bullwinkle Moose","David Jones","Janice Markhammer","Cheryl Cushing","Reuven Ytzrhak","Greg Knox","Joel England","Joel England")
Math<-c(502,600,412,538,512,492,410,625,573,522)
Science<-c(95,99,80,82,75,85,80,95,89,86)
English<-c(25,22,18,15,20,28,15,30,27,18)
roster<-data.frame(Student,Math,Science,English)
#将变量标准化
z<-scale(roster[,2:4])
#输出的结果为:
Math Science English
[1,] -0.234   1.078   0.587
[2,]  1.145   1.591   0.037
[3,] -1.500  -0.847  -0.697
[4,]  0.273  -0.590  -1.247
[5,] -0.093  -1.489  -0.330
[6,] -0.374  -0.205   1.137
[7,] -1.528  -0.847  -1.247
[8,]  1.497   1.078   1.504
[9,]  0.765   0.308   0.954
[10,]  0.048  -0.077  -0.697
#求各行的平均值
score<-apply(z,1,mean)
#将平均值放到花名册中
roster<-cbind(roster,score)
#寻找成绩的分界点
y<-quantile(score,c(0.8,0.6,0.4,0.2))
roster$grade[score>=y[1]]<-"A"
roster$grade[score<y[1]&score>=y[2]]<-"B"
roster$grade[score<y[2]&score>=y[3]]<-"C"
roster$grade[score<y[3]&score>=y[4]]<-"D"
#拆分字符串
name<-strsplit((roster$Student)," ")
#提取拆分的字符串
Lastname<-sapply(name, "[",2)
Firstname<-sapply(name, "[",1)
#将拆分的字符串添加到花名册中,并删除name
roster<-cbind(Firstname,Lastname,roster[,-1])
roster<-roster[order(Lastname,Firstname),]
roster
#输出结果
Student Math Science English score grade
1         John Davis  502      95      25  0.48     B
2    Angela Williams  600      99      22  0.92     A
3   Bullwinkle Moose  412      80      18 -1.01  <NA>4        David Jones  538      82      15 -0.52     D
5  Janice Markhammer  512      75      20 -0.64     D
6     Cheryl Cushing  492      85      28  0.19     C
7     Reuven Ytzrhak  410      80      15 -1.21  <NA>8          Greg Knox  625      95      30  1.36     A
9       Joel England  573      89      27  0.68     B
10      Joel England  522      86      18 -0.24     C

2.控制流

  • 语句(statement)是一条单独的R语句或者一组符合的语句(包含在花括号{}中的一组R语句,使用分号分隔)
  • 条件(cond)是一条最终被解释为真或假的表达式
  • 表达式(expr)是一天数值或字符串的求值语句
  • 序列(seq)是一个数值或字符串序列
#for循环重复执行一个语句,直到某个变量的值不再包含在序列seq中为止。
for(var in seq) statement
for(i in 1:10) print("Hello")
#单词Hello被输出了10次#while结构
#while循环从重复地执行一个语句,直到条件不为真为止。
while(cond) statement
i<-10
while(i>0){print("Hello");i<-i-1}#if-else结构
#控制结构if-else在某个给定条件为真时执行语句。也可以同时在条件为假时执行另一条语句。
if(cond) statement
if(cond) statement1 else statement2
if(is.character(grade)) grade<-as.factor(grade)
if(!is.factor(grade)) grade<-as.factor(grade) else print("Grade already is a factor")
#ifelse结构是if-else结构比较紧凑的向量画版本
ifelse(cond,statement1,statement2)
ifelse(score>0.5,print("Passed"),print("Failed"))
#switch根据一个表达式的值选择语句执行
switch(expr,……)
feelings<-c("sad","afraid")
feelings<-c("sad","afraid")
for(i in feelings)print(switch(i,happy="I am glad you are happy",afraid="There is nothing to fear",sad="Cheer up",angry="Calm down now"))
[1] "Cheer up"
[1] "There is nothing to fear"

3.用户自定义函数

#函数的基本结构
myfunction<-function(arg1,arg2,……){statementsreturn(object)
}
#函数实例
#函数实例
mystats<-function(x,parametric=TRUE,print=FALSE){if(parametric){center<-mean(x);spread<-sd(x)}else{center<-median(x);spread<-mad(x)}if(print&parametric){cat("Mean=",center,"\n","SD=",spread,"\n")}else if(print&!parametric){cat("Median=",center,"\n","MAD=",spread,"\n")}result<-list(center=center,spread=spread)return(result)
}
set.seed(1234)
x<rnorm(500)
y<-mystats(x)
print(y)
#输出结果
print(y)
80%   60%   40%   20%
0.73  0.30 -0.35 -0.71
#含有switch的自定义函数
mydate<-function(type="long"){switch(type,long=format(Sys.time(),"%A %B %Y"),short=format(Sys.time(),"%m-%d-%y"),cat(type,"is not a recognized type\n"))
}
mydate("long")
[1] "星期四 四月 2018"
mydate("short")
[1] "04-19-18"
mydate()
[1] "星期四 四月 2018"
mydate("medium")
medium is not a recognized type

4.整合与重构

#数据集的转置
cars<-mtcars[1:5,1:4]
cars
#输出结果
mpg cyl disp  hp
Mazda RX4          21   6  160 110
Mazda RX4 Wag      21   6  160 110
Datsun 710         23   4  108  93
Hornet 4 Drive     21   6  258 110
Hornet Sportabout  19   8  360 175
#利用t()函数转置
t(cars)
Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive        Hornet Sportabout
mpg         21            21         23             21        19
cyl          6             6          4              6         8
disp       160           160        108            258        360
hp         110           110         93            110        175

#数据集的整合
options(digits=3)
attach(mtcars)
aggdata<-aggregate(mtcars,by=list(cyl,gear),FUN=mean,na.rm=TRUE)
aggdata
#输出的结果集Group.1 Group.2  mpg cyl disp  hp drat   wt qsec  vs   am gear
1       4       3 21.5   4  120  97 3.70 2.46 20.0 1.0 0.00    3
2       6       3 19.8   6  242 108 2.92 3.34 19.8 1.0 0.00    3
3       8       3 15.1   8  358 194 3.12 4.10 17.1 0.0 0.00    3
4       4       4 26.9   4  103  76 4.11 2.38 19.6 1.0 0.75    4
5       6       4 19.8   6  164 116 3.91 3.09 17.7 0.5 0.50    4
6       4       5 28.2   4  108 102 4.10 1.83 16.8 0.5 1.00    5
7       6       5 19.7   6  145 175 3.62 2.77 15.5 0.0 1.00    5
8       8       5 15.4   8  326 300 3.88 3.37 14.6 0.0 1.00    5

在结果中,Group.1表示气缸数量(4,6,8),Group.2代表档位数(3,4,5)。举例来说,拥有4个气缸和3个档位车型的每加仑汽油行驶英里数均值为21.5

重构和整合数据集的万能工具-reshape2

ID<-c(1,1,2,2)
Time<-c(1,2,1,2)
X1<-c(5,3,6,2)
X2<-c(6,5,1,4)
mydata<-data.frame(ID,Time,X1,X2)
mydata
#输出结果为
ID Time X1 X2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4library(reshape2)
md<-melt(mydata,id=c("ID","Time"))
md
#输出结果
ID Time variable value
1  1    1       X1     5
2  1    2       X1     3
3  2    1       X1     6
4  2    2       X1     2
5  1    1       X2     6
6  1    2       X2     5
7  2    1       X2     1
8  2    2       X2     4
#执行整合
dcast(md,ID~variable,mean)
ID X1  X2
1  1  4 5.5
2  2  4 2.5
dcast(md,Time~variable,mean)
Time  X1  X2
1    1 5.5 3.5
2    2 2.5 4.5
dcast(md,ID~Time,mean)
ID   1 2
1  1 5.5 4
2  2 3.5 3
dcast(md,ID+Time~variable)
ID Time X1 X2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4
dcast(md,ID+variable~Time)
ID variable 1 2
1  1       X1 5 3
2  1       X2 6 5
3  2       X1 6 2
4  2       X2 1 4
dcast(md,ID~variable+Time)
ID X1_1 X1_2 X2_1 X2_2
1  1    5    3    6    5
2  2    6    2    1    4

转载于:https://www.cnblogs.com/jackjoin/p/8878199.html

R语言实战学习笔记-高级数据管理相关推荐

  1. R语言可视化学习笔记之相关矩阵可视化包ggcorrplot

    本文转载自"R语言中文社区",己获授权. 作者简介Introduction taoyan:伪码农,R语言爱好者,爱开源. 个人博客: https://ytlogos.github. ...

  2. R语言可视化学习笔记之ggridges包绘制山峦图

    作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源. 严涛老师的绘图教程还有: gganimate |诺奖文章里面的动图绘制教程来了!! ggplot2学习笔记之 ...

  3. R语言小白学习笔记12—概率分布

    R语言小白学习笔记12-概率分布 笔记链接 学习笔记12-概率分布 12.1 正态分布 12.2 二项分布 12.3 泊松分布 12.4 其他分布 笔记链接 学习笔记1-R语言基础. 学习笔记2-高级 ...

  4. R语言小白学习笔记13—基本统计

    R语言小白学习笔记13-基本统计 笔记链接 学习笔记13-基本统计 13.1 概括性统计量 13.2 相关系数和协方差 13.3 t-检验 13.3.1 单样本t检验 13.3.2 两样本t检验 13 ...

  5. R语言小白学习笔记3—R语言读取数据

    R语言小白学习笔记3-R语言读取数据 笔记链接 想说的话 学习笔记3-R语言读取数据 3.1 读取CSV文件 3.1.1 read_delim函数 3.1.2 fread函数 3.2 读取Excel数 ...

  6. R语言实战-读书笔记(第1 章 R语言介绍)

    *R语言实战所有学习笔记,如涉及侵权,请联系撤稿.* **标题号与书中标题号对应** R语言实战 第1章 R语言介绍     1.2 R的获取与安装         R可以在CRAN(Comprehe ...

  7. R:R语言实战学习一(基本统计分析)

    本学期的课程R语言实战只学了前六章的皮毛,实际上后面的知识用的更多,前面的是基础,这次学习第七章:基本统计分析. 1.描述性统计分析 主要关注分析连续型变量的中心趋势.变化性和分布形状的方法,为了便于 ...

  8. R语言--聚类学习笔记

    文章目录 聚类分析入门<R语言实战> 聚类分析入门<R语言实战> (1)聚类分析的一般步骤 ① (2)计算距离的方法: ①dist(x,method=) 计算矩阵或行列式中所有 ...

  9. R语言可视化学习笔记之ggridges包

    作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源. 严涛老师的绘图教程还有: gganimate |诺奖文章里面的动图绘制教程来了!! ggplot2学习笔记之 ...

最新文章

  1. ifconfig 命令介绍
  2. 递归 累加和累乘
  3. excel 数据导入(附工具类)
  4. Delphi开发单机瘦数据库程序要点
  5. 面向对象4(匿名对象、内部类、包、修饰符、代码块)
  6. 分享几个vscode的插件
  7. 通过暴露出来的OA和github信息拿Shell
  8. python最简易入门_零基础入门python,用最简单的方式即可入门python,没有那么复杂...
  9. 经验 | 如何提升目标检测NMS精度
  10. BZOJ 3611: [Heoi2014]大工程 [虚树 DP]
  11. 2018谷歌学术影响因子发布:NIPS首次跃进Top 100,CVPR排名泛AI领域第一
  12. Javascript 立即执行函数
  13. MAC-多开程序两种方法
  14. 《云边有个小卖部》的优秀读后感作文2100字
  15. 利用Power BI制作RFM客户分析模型
  16. 计算机科学与技术的应用及优势,解读计算机科学与技术的应用及发展趋向.docx...
  17. JES-java emil server搭建
  18. ORB-SLAM2的安装及试运行
  19. 在线查字典/汉语字典大全/字典查询网站源码开发搭建
  20. Note2:使用socket套接字通信

热门文章

  1. CentoS7 and MySql 5.7下载安装
  2. WebDriver自动化测试工具(3)---PhantomJS的使用
  3. 软件工程导论第六周作业:关于servlet,jquery,ExtJs,Spket
  4. 个人IHttpHandler,IHttpModule认识
  5. 揭秘企业级web负载均衡完美架构
  6. Git 什么时候用什么指令
  7. IT项目的面向对象分析设计、开发及管理
  8. uboot 命令分析(一) — bootm
  9. 不存在从node到node*的适当转换函数_C++构造函数和初始化表
  10. 库存管理系统软件测试,药房库存管理系统模块测试用例