2つのデータフレームがあります。最初のものには、KEY/ID列と2つの変数があります。
KEY V1 V2
1 10 2
2 20 4
3 30 6
4 40 8
5 50 10
2番目のデータフレームには、KEY/ID列と3番目の変数があります。
KEY V3
1 5
2 10
3 20
KEY列に従ってそれらを照合することにより、2番目のデータフレームにもある最初のデータフレームの行を抽出したいと思います。また、V3列を最終的なデータセットに追加したいと思います。
KEY V1 V2 V3
1 10 2 5
2 20 4 10
3 30 6 20
これはサブセットとマージ機能を使用した私の試みです
subset(data1, data1$KEY == data2$KEY)
merge(data1, data2, by.x = "KEY", by.y = "KEY")
それらのどれもタスクを行いません。
どんなヒントでも平気です。ありがとうございました!
merge(data1, data2, by="KEY")
はそれを行うべきです!
必要なものが内部結合である場合は、それを行う必要があります。両方のテーブルでclass(data1$key)
を使用してキー列の形式をチェックしない場合。
これらとクリスチャンによって提案されたマージとは別に、あなたは使うことができます-
library(plyr)
join(data1, data2, by="KEY", type="inner")
または
library(data.table)
setkey(data1, KEY)
setkey(data2, KEY)
data1[,list(data1,data2)]
dplyr
*_join
。サンプルデータが与えられた場合、次の両方で同じ結果が得られます。
library(dplyr)
df_merged <- inner_join(data1, data2, by = 'KEY')
df_merged <- right_join(data1, data2, by = 'KEY')
inner_join
は、df2に一致する値があるdf1からのすべての行と、df1およびdf2からのすべての列を返します。
right_join
は、df2からすべての行を返し、df1とdf2からすべての列を返します。