详解R语言数据合并一行代码搞定
数据的合并
需要的函数
cbind(),rbind(),bind_rows(),merge()
准备数据
我们先构造一组数据,以便下面的演示
>data1<-data.frame( +namea=c("海波","立波","秀波"), +value=c("一波","接","一波") +) >data1 nameavalue 1海波一波 2立波接 3秀波一波 >data2<-data.frame( +nameb=c("柯震东","刘强东","何盛东"), +value=c("东去","又","东来") +) >data2 namebvalue 1柯震东东去 2刘强东又 3何盛东东来
按列合并
>cbind(data1,data2) nameavaluenamebvalue 1海波一波柯震东东去 2立波接刘强东又 3秀波一波何盛东东来
按行合并
按列合并是cbind(),那么按行合并自然是rbind()
>rbind(data1,data2) Errorinmatch.names(clabs,names(xi)):名字同原来已有的名字不相对
出现了错误,这是因为”namea“和”nameb“不同造成的,如果都为"namea":
>data1<-data.frame( +namea=c("海波","立波","秀波"), +value=c("一波","接","一波") +) >data1 nameavalue 1海波一波 2立波接 3秀波一波 >data2<-data.frame( +namea=c("柯震东","刘强东","何盛东"), +value=c("东去","又","东来") +) >data2 nameavalue 1柯震东东去 2刘强东又 3何盛东东来 >#cbind(data1,data2) >rbind(data1,data2) nameavalue 1海波一波 2立波接 3秀波一波 4柯震东东去 5刘强东又 6何盛东东来
对数据修改后,没有出现错误。如果不修改数据该怎么做:
为了解决这个问题,使用dplyr包中的bind_rows()函数,不要求合并字段的名称必须相同,这个函数会自己做判断。
>library(dplyr) >dplyr::bind_rows(data1,data2) nameavaluenameb 1海波一波2立波接 3秀波一波 4 东去柯震东 5 又刘强东 6 东来何盛东
merge()
merge(x,y,by=intersect(names(x),names(y)), by.x=by,by.y=by,all=FALSE, all.x=all,all.y=all, sort=TRUE,suffixes=c(".x",".y"), incomparables=NULL,...)
merge函数参数的说明:
- x,y:用于合并的两个数据框
- by,by.x,by.y:指定依据哪些行合并数据框,默认值为相同列名的列.
- all,all.x,all.y:指定x和y的行是否应该全在输出文件.
- sort:by指定的列是否要排序.
- suffixes:指定除by外相同列名的后缀.
- incomparables:指定by中哪些单元不进行合并.
演示merge()
data3<-data.frame( name=c("波","东","波","波"), type=c("秀","震","秀","秀"), class=c(10,5,4,11), num=c(85,50,90,90) );data3 data4<-data_frame( name=c("波","东"), type=c("海","震"), class=c(5,5), num=c(88,81) );data4
#合并data3和data4 >merge(data3,data4,all=T) nametypeclassnum 1波秀490 2波秀1085 3波秀1190 4波海588 5东震550 6东震581
#按照name,type,class合并data3.data4 >merge(data3,data4,by=c("name","type","class"),all=T) nametypeclassnum.xnum.y 1波秀490NA 2波秀1085NA 3波秀1190NA 4波海5NA88 5东震55081
到此这篇关于详解R语言数据合并一行代码搞定的文章就介绍到这了,更多相关R语言数据合并内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。