2016-08-04 9 views
1

私は、世帯ごとに異なる変数を毎月まとめた2つのデータセットを持っています。私は世帯のIDと月に基づいて2つをマージしたい。IDと日付に基づいてデータセットをマージする

DF1 1は次のようになります。列のように追加されるから

hh_ids  date income consumption alcohol cleaning_materials clothing 
1 KELDK01 2012-11-1 62.70588 40.52941  0   0.000000 0.000000 
2 KELDK01 2012-12-1 17.64706 42.43530  0   1.058824 7.058824 
3 KELDK01 2013-01-1 91.76471 48.23529  0   0.000000 0.000000 
4 KELDK01 2013-02-1 91.76470 107.52940  0   0.000000 0.000000 
5 KELDK01 2013-03-1 116.47060 114.47060  0   0.000000 0.000000 
6 KELDK01 2013-04-1 124.41180 118.29410  0   2.705882 17.647060 
7 KELDK01 2013-05-1 137.23530 105.00000  0   1.411765 1.882353 
8 KELDK01 2013-06-1 131.52940 109.54120  0   4.352942 2.941176 
9 KELDK01 2013-07-1 121.52940 113.47060  0   2.352941 25.882350 
10 KELDK01 2013-08-1 123.32940 86.50588  0   2.588235 2.941176 

が、私は「合計」欄をしたい:

 hh_ids  date total 
    <chr>  <chr> <dbl> 
1 KELDK13 2013-8-1  1 
2 KMOMB02 2013-2-1  1 
3 KMOMB02 2013-5-1  2 
4 KMOMB04 2013-7-1  2 
5 KMOMB04 2013-9-1  1 
6 KMOMB06 2013-6-1  1 
7 KMOMB14 2013-8-1  1 
8 KMOMB16 2013-6-1  1 
9 KMOMB17 2012-10-1  1 
10 KMOMB17 2012-11-1  2 

とDF2の最初の10行は次のようになりますdf2に一致するhh_idsと日付を指定します。

私は次の操作を実行しようとしている:

df3<-merge(df2,df1,by=c("hh_ids","date")) 

しかし、私のDF2は53行があり、DF1は、より多くのを持って、そして得られたDF3はわずか14行があります。どんな提案も大歓迎です!

+0

予想される行数はいくつですか?オーバーラップがわずか14の場合、結果は正常です。 – Jimbou

+0

両方のデータフレームにわずか14のHH月が存在する可能性があります。もう1つのチェックは、変数の型が2つのデータセットで同じであるため、マージの際にファクタ/変数変換で変わったことはありません。 – lmo

+0

@ジンボウ:hh/dateの53通りの組み合わせがすべて大きなdata.frameに表示されるはずなので、53行が必要です。明快さの欠如のためのお詫び –

答えて

3

あなたは、彼らがdf1で何にも一致しない場合でも、あなたのdf2からすべての行を保持する場合は、あなたがあなたのマージでallパラメータを使用することができます。

df3 <- merge(df2, df1, by=c("hh_ids","date"), all.x=TRUE) 

これは中LEFT JOINを行うと等価です左側のdf2と右側のdf1の間のSQL。

+0

うーん... 18秒:) – Sotos

+0

これは何も...あなたが驚かれたい場合は、Arunの[プロフィール](http://stackoverflow.com/users/3732271/akrun)をチェックしてくださいRの人:-) –

+0

ええ、彼は数えません...彼は別のリーグでプレーしています:) – Sotos

関連する問題