可能性のある複製:
リスト内の複数のデータフレームを同時にマージ
例data.frames
:
df1 = data.frame(id=c('1','73','2','10','43'),v1=c(1,2,3,4,5)) <br>
df2 = data.frame(id=c('7','23','57','2','62','96'),v2=c(1,2,3,4,5,6)) <br>
df3 = data.frame(id=c('23','62'),v3=c(1,2)) <br>
注:id
は、data.frameごとに一意です。結果の行列を次のようにしたい
1 1 NA NA
2 3 4 NA
7 NA 1 NA
10 4 NA NA
23 NA 2 1
43 5 NA NA
57 NA 3 NA
62 NA 5 2
73 2 NA NA
96 NA 6 NA
この場合、3つのデータセットのみを表示します。実際には少なくとも22個あるため、最後にnx(22 + 1)のマトリックスが必要です。nは22個のデータセットすべてのIDの数です。
2つのデータセットがある場合、最初の列でids
を取得する必要があり、2番目と3番目の列には値が入力されます。値が存在しない場合は、代わりにNA
を入力します。
それらをlist
に入れ、merge
とともにReduce
を使用します
Reduce(function(x, y) merge(x, y, all=TRUE), list(df1, df2, df3))
# id v1 v2 v3
# 1 1 1 NA NA
# 2 10 4 NA NA
# 3 2 3 4 NA
# 4 43 5 NA NA
# 5 73 2 NA NA
# 6 23 NA 2 1
# 7 57 NA 3 NA
# 8 62 NA 5 2
# 9 7 NA 1 NA
# 10 96 NA 6 NA
このより簡潔なバージョンを使用することもできます。
Reduce(function(...) merge(..., all=TRUE), list(df1, df2, df3))