-1

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

我看了一下ddply和merge,似乎满足scenario1,但我无法解决scenario2的问题。

一个例子:
原始矩阵:Matrix2

Col1 Col2 Col3 Col4
ABC 100 200  900
DEF 300 400  1000

矩阵1

Col1 Col2 Col3
HIJ 500 600  
ABC 700 800
KLM 1100 1200

新的 Matrix2:

Col1 Col2 Col3 Col4
ABC 700 800 900
DEF 300 400  1000
HIJ 500 600 0
KLM 1100 1200 0

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

任何帮助都会很棒!

谢谢

麦克风

4

1 回答 1

3

也许一个解决方案rbind可能duplicated有用:

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

“Col1”的结果顺序重要吗?


更新

melt根据您的更新,也许您可​​以从组合、mergeduplicated和的“reshape2”包中寻找一个选项dcast

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

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

于 2013-10-18T13:24:19.030 回答