在日常数据分析和图形绘制等工作中,我们经常需要对数据进行合并处理,今天小锐为大家讲解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语言数据合并的内容就介绍到这里,关注公海赌船网址基因,干货持续推送!
明天的你,会感谢爱学习的自己~