R:按列名合并矩阵

时间:2016-12-07 20:53:29

标签: r matrix merge

我有一个关于合并功能的基本问题。

根据我的理解,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)

我一定是做错了。有什么建议?谢谢!

1 个答案:

答案 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