-1

私は2つのマトリックスを持っています。Matrix1 にあるが Matrix2 にはない要素 (シナリオ 1) が Matrix2 の最後に追加されるように、それらを組み合わせたいと思います。ただし、要素が Matrix1 と Matrix2 の両方にある場合 (シナリオ 2)、Matrix2 のその行の特定の列を、Matrix1 の対応する行の列で上書きしたいと考えています。

シナリオ 1 を満たしているように見える ddply とマージを調べましたが、シナリオ 2 に関する問題を解決できません。

例:
元の行列: 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 の 2 番目の行が両方とも末尾に追加されています。マトリックスを結合する場合、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あなたの更新に基づいて、おそらくmerge、、、、duplicatedおよびを組み合わせた「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 に答える