本篇内容介绍了“如何用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海波一波<NA>
2立波接<NA>
3秀波一波<NA>
4<NA>东去柯震东
5<NA>又刘强东
6<NA>东来何盛东
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语言数据合并一行”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!