2019-06-25浏览量:345

R语言数据合并技巧,您掌握了吗?

在日常数据分析和图形绘制等工作中,我们经常需要对数据进行合并处理,今天小锐为大家讲解R语言中的数据合并技巧。

 

首先建立示例数据:

class1<-data.frame(name=c("Tom","Mary","Bob","Mike","Lily"),hight=c(170,165,175,180,158))

class2<-data.frame(name=c("Lee","Judy","Max","Owen","Jack"),hight=c(170,167,183,185,177))

class3<-data.frame(name=c("Jackson","Iris","Edison","Rose","Annie","Julie"),score=c(90,85,75,80,95,60))

class1.1<-data.frame(name=c("Jackson","Owen","Bob","Mike","Lily"),score=c(90,85,75,80,95))



一、rbind、cbind、merge

这三个函数是Rbase中内置的,因无需加载R包,也是大家较常使用的数据合并函数。

 

rbind纵向合并:

rbind(class1,class2)

 

 

rbind(class1,class3)

 


是因为height和score不同,rbind合并要求字段名称相同,这里我们可以使用dplyr包中的bind_rows函数,这个函数会对字段名称不相同的数据进行判断,自动补全。看一下使用bind_rows的效果:

library(dplyr)

bind_rows(class1,class3)

 

 

会合并共有字段“name”,保留各自的特有字段,没有对应值的部分,用NA填充。

 

cbind横向合并:

cbind(class1,class1.1)

 

 

cbind函数无需匹配主字段,仅将数据进行横向拼接。

若我们想将两个数据的共有字段“name”合并在一起,而不是简单的横向拼接,可以使用merge函数。

 

merge函数

merge函数对数据进行横向合并,可针对主字段进行匹配,如果主字段名称不一致,可以指定匹配的主字段名称。

基本语法:

merge(x,y,by = , by.x = , by.y = , all = , all.x = , all.y = ,...)

 

 

merge(class1,class1.1,by="name",all=TRUE)

 

 

merge(class1,class1.1,by="name",all=FALSE)

 

 

merge(class1,class1.1,by="name",all.x=TRUE)

 

 

merge(class1,class1.1,by="name",all.y=TRUE)

 

 

如果我们合并的两个数据是主字段不相同时,使用by.x和by.y参数指定列名称,修改class1.1的列名称来进行演示:

colnames(class1.1)=c("studentname","score")

 

 

merge(class1,class1.1,by.x="name",by.y="studentname",all=TRUE)

 

 

merge(class1,class1.1,by.x="name",by.y="studentname",all=FALSE)

 

 

二、dplyr中的join函数

join为一系列函数,包括:full_join,inner_join,left_join,right_join。

dplyr的join函数名称可直观反映数据的合并效果,通过控制函数来实现不同的数据合并形式。相较与merge函数,join函数语句更加精练,更为直观更好理解。

 

 

让我们来感受一下join函数的使用:

full_join(class1,class1.1,by=c("name"="studentname"))

 

 

inner_join(class1,class1.1,by=c("name"="studentname"))

 

 

left_join(class1,class1.1,by=c("name"="studentname"))

 

 

right_join(class1,class1.1,by=c("name"="studentname"))

 

 

今天R语言数据合并的内容就介绍到这里,关注锐翌基因,干货持续推送!

明天的你,会感谢爱学习的自己~


下一篇

版权所有 上海锐翌生物科技有限公司 沪ICP备16022951号