R:在两个矩阵中组合公共行

R:在两个矩阵中组合公共行,r,merge,R,Merge,我有两个矩阵。我希望将它们组合在一起,以便将Matrix1中但不在Matrix2中的任何元素(场景1)添加到Matrix2的末尾。但是,如果元素同时位于Matrix1和Matrix2中(场景2),那么我想用Matrix1对应行的列覆盖该Matrix2行中的某些列 我已经研究了ddply和merge,它们似乎满足场景1,但我无法解决场景2的问题 例如: 原始矩阵: Matrix2 Matrix1 新矩阵2: 其中,原始Matrix2中的第一行已被Matrix1中的对应行替换,Matrix1和Mat

我有两个矩阵。我希望将它们组合在一起,以便将Matrix1中但不在Matrix2中的任何元素(场景1)添加到Matrix2的末尾。但是,如果元素同时位于Matrix1和Matrix2中(场景2),那么我想用Matrix1对应行的列覆盖该Matrix2行中的某些列

我已经研究了ddply和merge,它们似乎满足场景1,但我无法解决场景2的问题

例如:
原始矩阵: Matrix2

Matrix1

新矩阵2:

其中,原始Matrix2中的第一行已被Matrix1中的对应行替换,Matrix1和Matrix2中的第二行均已附加在末尾。组合矩阵时,矩阵2(Col4)中的额外列未调整。此外,矩阵具有不同的维数

任何帮助都会很好

谢谢


Mike

可能需要一个带有
rbind
重复的
的解决方案:

m1m2 <- rbind(Matrix2, Matrix1)
m1m2[!duplicated(m1m2$Col1), ]
#   Col1 Col2 Col3
# 1  HIJ  500  600
# 2  ABC  700  800
# 4  DEF  300  400

我的猜测是,您可能需要在此处添加另一个变量来标识源
数据。frame
,以确保在最后一步中获取正确的数据。

请提供一个具有样本数据的可复制示例。@juba,刚刚添加,谢谢。您的示例似乎没有完全捕捉到您的描述所说的内容。在您的示例中,您使用Matrix1中的值覆盖了ABC行Matrix2中的所有列,但您的描述中说您只想覆盖某些列。@MatthewPlourd,您说得对,我已经更新了。另外,很抱歉格式化,我不知道如何使其对齐。感谢您的回复。我刚刚修正了这个问题,以说明矩阵有不同的维数。谢谢again@Mike,我添加了一个更新,它可能会帮助您找到正确的方向。感谢您的帮助,我将尝试摆弄它,看看我能得到什么!我似乎无法让它工作,不断得到奇怪的结果。我有没有办法上传我的数据来告诉你我得到了什么?谢谢
Col1 Col2 Col3
HIJ 500 600  
ABC 700 800
KLM 1100 1200
Col1 Col2 Col3 Col4
ABC 700 800 900
DEF 300 400  1000
HIJ 500 600 0
KLM 1100 1200 0
m1m2 <- rbind(Matrix2, Matrix1)
m1m2[!duplicated(m1m2$Col1), ]
#   Col1 Col2 Col3
# 1  HIJ  500  600
# 2  ABC  700  800
# 4  DEF  300  400
library(reshape2)
M1 <- melt(Matrix1, id.vars="Col1") ## Convert your data into a "long" format
M2 <- melt(Matrix2, id.vars="Col1")
M1M2 <- merge(M1, M2, all = TRUE)   ## Merge this long data
dcast(M1M2[!duplicated(M1M2[1:2], fromLast=TRUE), ], Col1 ~ variable, fill=0)
#   Col1 Col2 Col3 Col4
# 1  ABC  700  800  900
# 2  DEF  300  400 1000
# 3  HIJ  500  600    0
# 4  KLM 1100 1200    0