根据另一列索引R组合来自不同数据帧的不同列

时间:2013-12-02 19:01:01

标签: r merge dataframe

所以我有三个数据框,我们称之为a,b,c 在每个数据框内,有一些名为1,2,3,4的列,包含54175行数据

第1列的ID名称在每个数据框中相同但不一定是相同的顺序

第2,3,4列只是数值

我想根据第1列中的ID从第2列中提取a,b,c的所有信息,因此a,b,c的每个值都与正确的ID相关

我试过像

这样的东西
m1 <- merge(A[,'2'], b[,'2'], c[,2'], by='1') 

我收到此错误

Error in fix.by(by.x, x) : 'by' must match numbers of columns

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

夫妻问题:

  • 合并两次一次,不再合作。

  • 您需要在合并的data.frames中包含by列。

修复这些:

m1 <- merge(A[,c("1", "2")], B[,c("1", "2")])
m2 <- merge(m1, C[, c("1", "2")])

然后m2应该是您正在寻找的结果。

顺便说一下,使用只是数字字符的列名非常奇怪。如果它们是有序的,只需使用列索引(无引号),否则在其中加入一些内容以表明它们的名称不是数字,例如,R的默认值为"V1", "V2", "V3"。当然,最好的是一个有意义的名称,如"id", "MeasureDescription", ...

答案 1 :(得分:1)

你必须一次合并2个:

a<-data.frame(sample(1:100,100),100*runif(100),100*runif(100),100*runif(100))
colnames(a)<-1:4
b<-data.frame("C1"=sample(1:100,100),"C2"=100*runif(100),"C3"=100*runif(100),"C4"=100*runif(100))
colnames(b)<-1:4
c<-data.frame("C1"=sample(1:100,100),"C2"=100*runif(100),"C3"=100*runif(100),"C4"=100*runif(100))
colnames(c)<-1:4

f<-merge(a[,1:2],b[,1:2],by=(1))
f<-merge(f,c[,1:2],by=(1))
colnames(f)<-c(1,"A2","B2","C2")
head(f)

1       A2       B2       C2
1 1 54.63326 39.23676 28.10989
2 2 10.10024 56.08021 69.44268
3 3 45.02948 14.69028 22.44243
4 4 90.50883 33.61303 98.00917
5 5 13.80767 80.93382 77.22679
6 6 80.72241 27.22139 51.34516

答案 2 :(得分:1)

您可以使用merge两次:

merge(merge(a[1:2], b[1:2], by = "1"), c[1:2])

Reducemerge

Reduce(function(...) merge(..., by = "1"), list(a[1:2], b[1:2], c[1:2]))

答案 3 :(得分:0)

我认为回答这个问题的最简单方法是:

m1 <- merge(A[,'2'], b[,'2'], c[,2'], by='1') 

应该是=(1)

m1 <- merge(A[,'2'], b[,'2'], c[,2'], by=(1)) 

只有当您想要按列名称合并时,才需要单引号,例如:

m1 <- merge(A[,'2'], b[,'2'], c[,2'], by='ID')