用r中的行名连接两个不同大小的矩阵

用r中的行名连接两个不同大小的矩阵,r,join,matrix,dimensions,R,Join,Matrix,Dimensions,我见过一些关于这个的问题,但我无法理解任何答案,它们似乎都是封闭的线索 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 我想做的是连接两个矩阵,它们有不同的维度,但有两个公共列。如果两个矩阵中的任意两行在两列中具有相同的值,我希望随后追加这两行,否则我希望将该行添加到矩阵的底部 M

我见过一些关于这个的问题,但我无法理解任何答案,它们似乎都是封闭的线索

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
我想做的是连接两个矩阵,它们有不同的维度,但有两个公共列。如果两个矩阵中的任意两行在两列中具有相同的值,我希望随后追加这两行,否则我希望将该行添加到矩阵的底部

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

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和矩阵2的第一行在Col1和Col3中具有相同的条目,而行2和3则不同

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
我希望输出如下所示:

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
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
这样匹配的行被连接起来,而任何不匹配的行都被简单地添加到末尾

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
有人知道怎么做吗?任何帮助都将不胜感激

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
谢谢

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

迈克

a我现在正在打电话,所以我不会发布答案,但你看过合并吗?@AnandaMahto我试过了,但我在让它工作时遇到了一些麻烦。我使用了这个:
merge(Matrix1,Matrix2,by.Matrix1=c(Matrix1[,1],Matrix1[,3]),by.Matrix2=c(Matrix2[,1],Matrix2[,2])
(对不起,我不知道如何在注释中输入代码?),但它会生成一个0乘0的矩阵,即使两个矩阵之间存在明确的重叠。谢谢你的帮助,Mike,正如@zx8754所提到的,请将你的最终解决方案作为答案发布,并(在允许的情况下)接受它。这有助于其他提出类似问题的人迅速发现,有一个可能适用于他们情况的答案。好的,当然可以
a=merge(Matrix1,Matrix2,by.Matrix2=c(Matrix2[,1],Matrix2$[,3]),by.Matrix1=c(Matrix1$[,1],Matrix1[,3]),all=TRUE)
@Mike,你不能接受评论:)--看到“你的答案”的大框了吗?在那里写下你的答案,当SO允许你这样做时,通过勾选空心复选标记来接受它,这可能需要一段时间,因为SO会让你等待接受自己的答案(我想)。我认为这会更直接:
merge(Matrix1,Matrix2,by=c(“Col1”,“Col3”),all=TRUE)
。这里,
by=c(“Col1”、“Col3”)
在两个矩阵之间传递公共列的名称。顺便说一句,现在你也应该能够接受你的答案了:-)
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