0
私は3つのデータフレームを持っています。他の2つのサブデータフレームをマージする1つの「メイン」データフレーム。最初のマージで一致するデータフレームマージを使用してデータフレームにNAsを埋め込むR
main = data.frame(a = LETTERS[1:5], b = round(rnorm(5),2))
a b
A 0.41
B -1.06
C -0.65
D -1.27
E 1.03
sub1 = data.frame(a = LETTERS[2:4], c = sample(c(100, 200, 300), 3, replace=T))
a c
B 200
C 200
D 200
sub2 = data.frame(a = LETTERS[c(1,5)], c = sample(c(999, 888), 2, replace=T))
a c
A 999
E 888
、私は"a"
経由main
にsub1
をマージすると、これは動作します。
merged1 = merge(main, sub1, by="a", all.x=T)
a b c
A 0.41 NA
B -1.06 300
C -0.65 300
D -1.27 100
E 1.03 NA
今私はsub2
がmerged1
にマージ/参加したいです。私の場合、sub2
によって提供される値は、列cのNAsに置き換えられます。具体的には、これらのNAsをsub2
の値に置き換えます。私はこれを試してみました(とall.x
ための他の引数、all.y
:
merge(merged1, sub2, by="a", all.x=T)
a b c.x c.y
A 0.41 NA 999
B -1.06 300 NA
C -0.65 300 NA
D -1.27 100 NA
E 1.03 NA 999
私は、これは、マージして1列のみのCであることを取得できますか
あなたは1)は、彼らが再現しているように、これらのdata.framesを生成するときに、シード番号を設定してご使用くださいでした。 2)命名規則で一貫している...データフレーム "sub1"と "main"を作成しますが、マージで "df_main"と "df_sub1"を使用します。 3)あなたの例を正確にチェックしてください。 df_sub1とsub1は異なります。なぜなら、後者には300が含まれていますが、前者には200しか含まれていないからです。 – AOGSTA
'rbind(df_sub1、df_sub2)'だけで、個々の小さなマージの代わりにマージします。 'rbind'を成功させるには、factorカラムを文字に変換する必要があります。 – Gregor
私は他の唯一の選択肢は[コアレースのような機能](http://stackoverflow.com/q/19253820/903061)で後処理することだと思います。 – Gregor