2013-09-27 124 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