用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