所以我有三个数据框,我们称之为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
感谢您的帮助!
答案 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])
或Reduce
与merge
:
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')