我有一个关于合并功能的基本问题。
根据我的理解,merge(mat1,mat2)应该按列名合并矩阵,保留两个矩阵中的矩阵。
我有两张桌子(下面的例子)。行名称不同,但有些列名称是相同的。我想保留共同的列:
MAT1:
B C D E
a x x x x
b x x x x
c x x x x
d x x x x
e x x x x
和mat2:
B E F G
f y y y y
g y y y y
h y y y y
i y y y y
j y y y y
所以输出应该是这样的:
B E
a x x
b x x
c x x
d x x
e x x
f y y
g y y
h y y
i y y
j y y
但是,merge(mat1,mat2)返回:
> merge(test, testt)
[1] B E C D F G
<0 rows> (or 0-length row.names)
我一定是做错了。有什么建议?谢谢!
答案 0 :(得分:1)
您可以使用rbind执行此操作,并让它自动检查匹配的列名称。
如果你正在使用data.table,你可以这样做:
DT1 = data.table(1:2,1:2)
DT2 = data.table(1:2,1:2,1:2)
rbind(DT1[,which(colnames(DT1) %in% colnames(DT2)),with = FALSE],DT2[,which(colnames(DT2) %in% colnames(DT1)),with = FALSE])
输出:
V1 V2
1 1
2 2
1 1
2 2
对于data.frame:
DF1 = data.frame(1:2,1:2)
DF2 = data.frame(1:2,1:2,1:2)
rbind(DF1[,which(colnames(DF1) %in% colnames(DF2))],DF2[,which(colnames(DF2) %in% colnames(DF1))])
输出:
X1.2 X1.2.1
1 1
2 2
1 1
2 2