web-dev-qa-db-ja.com

キー列による2つのdata.framesのマージ

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")

それらのどれもタスクを行いません。

どんなヒントでも平気です。ありがとうございました!

13
user3618451

merge(data1, data2, by="KEY")はそれを行うべきです!

20
Christian Borck

必要なものが内部結合である場合は、それを行う必要があります。両方のテーブルで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)]
1
RHelp

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からすべての列を返します。

0
sbha