r のデータフレーム間の Two by two matching のように -7 になる前に、次のページを既に読んでいるとしましょう。
- あるdata.frameから別のdata.frameに行をコピーする方法[R]
- R 別の data.frame の値を使用して data.frame の列を更新する方法
- 1 つの data.frame を使用して別のデータを更新する
実際、最後のものは私が望むものと本当に似ていますが、私の列が異なるため、同じではありません
私は2つのデータフレームを持っています。
> d <- data.frame(year=c(2004,2004,2006),month = c(1,5,3), height = c(1000,2000,3000) )
> d
year month height
1 2004 1 1000
2 2004 5 2000
3 2006 3 3000
> e <- data.frame(year=c(2004),month=c(5), height = c(9999))
> e
year month height
1 2004 5 9999
明らかに、実際のデータはこれよりも長くなります。
e の値を d にマージしたい
生のマージを試してください:
> merge(d,e)
[1] year month height
<0 rows> (or 0-length row.names)
Ok。したがって、「by」を追加します。
> merge(d,e,by=c("year","month"))
year month height.x height.y
1 2004 5 2000 9999
OK、内部結合を実行し、d の元のデータをすべて削除しました。したがって、左外部結合を試してください。
> merge(d,e,by=c("year","month"),all.x = T)
year month height.x height.y
1 2004 1 1000 NA
2 2004 5 2000 9999
3 2006 3 3000 NA
それは結合を行い、外部結合の定義に従って正しいですが、e の値から d の値を更新するという、私が望むことはしませんでした。私が本当に欲しいのは、SQLの更新のようなものです:
for (year,month,height) in e:
update d set d.height=e.height where d.year = e.year and d.month = e.month
つまり、私が望む結果は次のようになります。
> magic(d,e)
year month height
1 2004 1 1000
2 2004 5 9999
3 2006 3 3000
もちろん、たくさんのfor
ループを書くこともできますが、これを行うためのベクトル化された方法があることを願っていますか?
編集: 私の例にはキー列が 1 つしかありませんでしたが、実際の問題には 2 つありました。これを反映するように例を更新しました。