数据选取与简单操作:

which

返回一个向量中指定元素的索引

which.max

返回最大元素的索引

which.min

返回最小元素的索引

sample

随机在向量中抽取元素

subset

根据条件选取元素

sort

升序排列元素

rev

反转所有元素

order

获取排序后的索引

table

返回频数表

cut

将数据分割为几部分

split

按照指定条件分割数据

rbind

行合并

cbind

列合并

merge

按照指定列合并矩阵或者数据框

一、数据合并

1、merge()函数

最常用merge()函数,但是这个函数使用时候这两种情况需要注意:

1、merge(a,b),纯粹地把两个数据集合在一起,没有沟通a、b数据集的by,这样出现的数据很多,相当于a*b条数据;

2、merge函数是匹配到a,b数据集的并,都有的才匹配出来,如果a、b数据集ID不同,要用all=T(下面有all用法的代码)。


[plain]  view plain  copy


print 
   ? 
    
    
 
1. #横向合并  
2. ID<-c(1,2,3,4)  
3. name<-c("Jim","Tony","Lisa","Tom")  
4. score<-c(89,22,78,78)  
5. student1<-data.frame(ID,name)  
6. student2<-data.frame(ID,score)  
7. total_student<-merge(student1,student2,by="ID")  #或者rbind()  
8. total_student


[plain]  view plain  copy


 print

?

 
    
 
1. #纵向合并  
2. ID<-c(1,2,3)  
3. name<-c("Jame","Kevin","Sunny")  
4. student1<-data.frame(ID,name)  
5. ID<-c(4,5,6)  
6. name<-c("Sun","Frame","Eric")  
7. student2<-data.frame(ID,name)  
8. total<-cbind(student1,student2)  
9. total



merge的all用法


[plain]  view plain  copy


 print

?

 
    
 
1. > id=c("1","2","3")  
2. > M=c("7","2","3")  
3. > ink2=data.frame(id,M)  
4. >   
5. > merge(ink1,ink2,by="id",all=T)  #所有数据列都放进来,空缺的补值为NA  
6.   id    R    M  
7. 1  1    9    7  
8. 2  2    7    2  
9. 3  4    9 <NA>  
10. 4  3 <NA>    3  
11. > merge(ink1,ink2,by="id",all=F)  #默认,只取两者的共有的部分  
12.   id R M  
13. 1  1 9 7  
14. 2  2 7 2


其中,all=T代表全连接,all.x=T代表左联结;all.y=T代表右连接



3、paste函数

生成一长串字符向量。


[plain]  view plain  copy


 print

?

  1. paste(c("X","Y"),1:10,sep="")      #"X”,"Y"是长度为2的字符向量,1:10 长度为10的向量。命令是让这两个向量粘合在一起生成新的字符串向量,粘合后的新字符之间没有间隔。  




[plain]  view plain  copy


 print

?

 
  
1. #—————————paste中seq与collapse区别————————————————————  
2. a = c(1, 2, 3, 4, 5)  
3. names(a) = c('m', 'n','o', 'p', 'q')  
4. # 主要是区分使用sep和collapse  
5. b = paste(a, names(a), sep = "/")          #不同向量合并在一起,但是还是各自向量  
6. c = paste(b, collapse = ",")               #不同向量合并在一起,但是变成一个向量  
7. mode(b) #变量类型  
8. mode(c)


4、cbind和rbind函数


cbind()和rbind(),cbind()按照纵向方向,或者说按列的方式将矩阵连接到一起。

rbind()按照横向的方向,或者说按行的方式将矩阵连接到一起




rbind/cbind对数据合并的要求比较严格:合并的变量名必须一致;数据等长;指标顺序必须一致。相比来说,其他一些方法要好一些,有dplyr,sqldf中的union

5、sqldf包


利用SQL语句来写,进行数据合并,适合数据库熟悉的人,可参考: 

R语言︱ 数据库SQL-R连接与SQL语句执行(RODBC、sqldf包)

二、数据增减



[plain]  view plain  copy


 print

?


  1. x=x[,-1]  #这个就代表,删除了x数据集中第一列数据  


或用dplyr包中的mutate函数


[plain]  view plain  copy


 print

?

 
    
 
1. a=mutate(Hdma_dat,dou=2*survived,dou4=4*survived)   
2. Hdma_dat$dou=a$dou  
3. Hdma_dat$dou4=a$dou4   #两个新序列,加入到Hdma数据集汇总


筛选变量服从某值的子集


[plain]  view plain  copy


 print

?

 
 
1. subset(airquality, Temp > 80, select = c(Ozone, Temp))  
2. subset(airquality, Day == 1, select = -Temp)  
3. subset(airquality, select = Ozone:Wind)

三、数据纵横加总

R使用rowSums函数对行求和,使用colSums函数对列求和。

四、不等长合并


1、plyr包

rbind.fill函数可以很好将数据进行合并,并且补齐没有匹配到的缺失值为NA。


[plain]  view plain  copy


 print

?

 
    
 
1. #————————————————————————————不等长合并  
2. #如何解决合并时数据不等长问题——两种方法:do.call函数以及rbind.fill函数(plyr包)  
3. #rbind.fill函数只能合并数据框格式  
4. #do.call函数在数据框中执行函数(函数,数据列)  
5. library("plyr")  #加载获取rbind.fill函数  
6. #第一种方法  
7. list1<-list()  
8. list1[[1]]=data.frame(t(data.frame(Job_Pwordseg.ct[1])))  
9. list1[[2]]=data.frame(t(data.frame(Job_Pwordseg.ct[2])))  
10. do.call(rbind.fill,list1)  
11. #第二种方法  
12. u=rbind.fill(data.frame(t(data.frame(Job_Pwordseg.ct[1]))),data.frame(t(data.frame(Job_Pwordseg.ct[2]))))

核心函数是plyr包中的rbind.fill函数(合并的数据,必须是data.frame),do.call可以用来批量执行。(do.call用法



关于do.call其他用法(R语言 函数do.call()使用 )

有一个list,想把里面的所有元素相加求和。发现了两个很有意思的函数

list <- list(matrix(1:25, ncol = 5), matrix(4:28, ncol = 5), matrix(21:45, ncol=5))

list.sum<-do.call(sum,list)

list.sum<-do.call(cbind,list)  

do.call()是告诉list一个函数,然后list里的所有元素来执行这个函数。


2、dplyr包

dplyr::bind_rows()


[html]  view plain  copy


 print

?


 
    
 
1.     mpg   cyl    hp  drat    wt  qsec    vs    am  gear  carb  disp  
2.   (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)  
3. 1  21.0     6   110  3.90 2.620 16.46     0     1     4     4    NA  
4. 2  21.0     6   110  3.90 2.875 17.02     0     1     4     4    NA  
5. 3  22.8     4    93  3.85 2.320 18.61     1     1     4     1    NA  
6. 4  21.4     6   110  3.08 3.215 19.44     1     0     3     1    NA  
7. 5  17.8     6   123  3.92 3.440 18.90     1     0     4     4 167.6  
8. 6  16.4     8   180  3.07 4.070 17.40     0     0     3     3 275.8  
9. 7  17.3     8   180  3.07 3.730 17.60     0     0     3     3 275.8  
10. 8  15.2     8   180  3.07 3.780 18.00     0     0     3     3 275.8


3、paste函数

生成一长串字符向量。



[plain]  view plain  copy


 print

?

1. paste(c("X","Y"),1:10,sep="")      #"X”,"Y"是长度为2的字符向量,1:10 长度为10的向量。命令是让这两个向量粘合在一起生成新的字符串向量,粘合后的新字符之间没有间隔。




[plain]  view plain  copy


 print

?

1. #—————————paste中seq与collapse区别————————————————————  
2. a = c(1, 2, 3, 4, 5)  
3. names(a) = c('m', 'n','o', 'p', 'q')  
4. # 主要是区分使用sep和collapse  
5. b = paste(a, names(a), sep = "/")          #不同向量合并在一起,但是还是各自向量  
6. c = paste(b, collapse = ",")               #不同向量合并在一起,但是变成一个向量  
7. mode(b) #变量类型  
8. mode(c)

4、cbind和rbind函数




cbind()和rbind(),cbind()按照纵向方向,或者说按列的方式将矩阵连接到一起。

rbind()按照横向的方向,或者说按行的方式将矩阵连接到一起




rbind/cbind对数据合并的要求比较严格:合并的变量名必须一致;数据等长;指标顺序必须一致。相比来说,其他一些方法要好一些,有dplyr,sqldf中的union

5、sqldf包


利用SQL语句来写,进行数据合并,适合数据库熟悉的人,可参考: 

R语言︱ 数据库SQL-R连接与SQL语句执行(RODBC、sqldf包)

二、数据增减




[plain]  view plain  copy


 print

?

 
  
1. x=x[,-1]  #这个就代表,删除了x数据集中第一列数据


或用dplyr包中的mutate函数




[plain]  view plain  copy


 print

?

 
     
  
1. a=mutate(Hdma_dat,dou=2*survived,dou4=4*survived)   
2. Hdma_dat$dou=a$dou  
3. Hdma_dat$dou4=a$dou4   #两个新序列,加入到Hdma数据集汇总



筛选变量服从某值的子集



[plain]  view plain  copy


 print

?

 
  
1. subset(airquality, Temp > 80, select = c(Ozone, Temp))  
2. subset(airquality, Day == 1, select = -Temp)  
3. subset(airquality, select = Ozone:Wind)


三、数据纵横加总

R使用rowSums函数对行求和,使用colSums函数对列求和。

四、不等长合并


1、plyr包

rbind.fill函数可以很好将数据进行合并,并且补齐没有匹配到的缺失值为NA。



[plain]  view plain  copy


 print

?

1. #————————————————————————————不等长合并  
2. #如何解决合并时数据不等长问题——两种方法:do.call函数以及rbind.fill函数(plyr包)  
3. #rbind.fill函数只能合并数据框格式  
4. #do.call函数在数据框中执行函数(函数,数据列)  
5. library("plyr")  #加载获取rbind.fill函数  
6. #第一种方法  
7. list1<-list()  
8. list1[[1]]=data.frame(t(data.frame(Job_Pwordseg.ct[1])))  
9. list1[[2]]=data.frame(t(data.frame(Job_Pwordseg.ct[2])))  
10. do.call(rbind.fill,list1)  
11. #第二种方法  
12. u=rbind.fill(data.frame(t(data.frame(Job_Pwordseg.ct[1]))),data.frame(t(data.frame(Job_Pwordseg.ct[2]))))

核心函数是plyr包中的rbind.fill函数(合并的数据,必须是data.frame),do.call可以用来批量执行。(do.call用法



关于do.call其他用法(R语言 函数do.call()使用 )

有一个list,想把里面的所有元素相加求和。发现了两个很有意思的函数

list <- list(matrix(1:25, ncol = 5), matrix(4:28, ncol = 5), matrix(21:45, ncol=5))

list.sum<-do.call(sum,list)

list.sum<-do.call(cbind,list)  

do.call()是告诉list一个函数,然后list里的所有元素来执行这个函数。


2、dplyr包

dplyr::bind_rows()



[html]  view plain  copy

 print

?

 
     
  
1.     mpg   cyl    hp  drat    wt  qsec    vs    am  gear  carb  disp  
2.   (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)  
3. 1  21.0     6   110  3.90 2.620 16.46     0     1     4     4    NA  
4. 2  21.0     6   110  3.90 2.875 17.02     0     1     4     4    NA  
5. 3  22.8     4    93  3.85 2.320 18.61     1     1     4     1    NA  
6. 4  21.4     6   110  3.08 3.215 19.44     1     0     3     1    NA  
7. 5  17.8     6   123  3.92 3.440 18.90     1     0     4     4 167.6  
8. 6  16.4     8   180  3.07 4.070 17.40     0     0     3     3 275.8  
9. 7  17.3     8   180  3.07 3.730 17.60     0     0     3     3 275.8  
10. 8  15.2     8   180  3.07 3.780 18.00     0     0     3     3 275.8