2013-09-27 74 views
0

我看过几个关于此问题的问题,但我无法理解任何答案,并且它们似乎都是关闭的线程。按行名加入两个不同大小的矩阵r

我想要做的是加入两个不同维度的矩阵,但有两个共同的列。如果两个矩阵中的任何两行在两列中具有相同的值,我想要追加这两行,否则我想将该行添加到矩阵的底部。

例如:矩阵1

Matrix 1 
Col1 Col2 Col3 Col4 
a  b c d 
e  f g h 
i  j k l 

Matrix 2 
Col1 Col3 Col5 
a c e 
g f m 

在上面的例子中,第一行中的矩阵1和两个具有在col1和COL3同一条目,而行2和3是不同的。

我想输出到如下所示:

NewMatrix 
Col1 Col2 Col3 Col4 Col5 
a  b c d e 
e  f g h 0 
i  j k l 0 
g  0 f 0 m 

这样匹配的行结合,而那些不匹配任何行被简单地添加到年底。

有没有人有如何做到这一点的想法?任何帮助,将不胜感激。

感谢

迈克

+2

我我的手机上,现在,所以我将不会发布一个答案,但你看过合并? – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto 我已经尝试过了,但是我有一些麻烦让它工作。我使用这种方法:Matrix1,Matrix2,by.Matrix1 = c(Matrix1 [,1],Matrix1 [,3]),by.Matrix2 = c(Matrix2 [,1],Matrix2 [,2])) ' (对不起,我不确定如何在代码中输入代码?) 但它会产生0乘0矩阵,即使两个矩阵之间存在明确的重叠。 感谢您的帮助 – Mike

+0

@AnandaMahto 感谢您的帮助,我设法使用合并工作,我只是在上面的消息中有一个轻微的语法错误。 再次感谢您的帮助! – Mike

回答

0
a <- merge(Matrix1, Matrix2, 
      by.Matrix2 = c(Matrix2[,1], Matrix2$[,3]), 
      by.Matrix1 = c(Matrix1[,1], Matrix1[,3]), 
      all = TRUE) 

更新,更清洁的版本从@Ananda:

a <- merge(Matrix1, Matrix2, by = c("Col1", "Col3"), all = TRUE) 
+2

我认为这会更直接:合并(Matrix1,Matrix2,by = c(“Col1”,“Col3”),all = TRUE)'。这里,by = c(“Col1”,“Col3”)传递两个矩阵之间公共列的名称。顺便说一句,现在你应该能够*接受*你的答案了:-) – A5C1D2H2I1M1N2O1R2T1