@Uweブロックの助けを借りて解決しました。R data.tableは行を削除します(12月のみ)
R data.table mergeは、毎月のデータセットを1日の観測データセットにマージしようとしているときに、1つのデータセットに月インデックスを戻して12月の観察を削除します。期待どおりに動作するこのマージを行う良い方法は何ですか?
daily[monthly, on=c("year","month"), all=TRUE]
の代わりに@Harry Daniels merge(monthly, daily, by=c("year","month"), all=TRUE)
のマージを使用すると、すべての1日の観測が正しく保持されますが、1月 - > 0になるように月ごとのデータがシフトされます。
問題:毎月のデータセットで月と年の列を生成すると、あまり正確には整数値ではない月が作成されました。私。 1は実際に0.999999999999091だったので、マージは内部的にフロアを取り、それを相殺しました。 例:日付が数値2016.01,2016.02、...、2016.12として保存された `monthly [、month:= 100 *(Date %% 1)] '
は以下を参照してください。
> monthly
year month CPI
1: 2016 1 236.916
2: 2016 2 237.111
3: 2016 3 238.132
4: 2016 4 239.261
5: 2016 5 240.229
6: 2016 6 241.018
7: 2016 7 240.628
8: 2016 8 240.849
9: 2016 9 241.428
10: 2016 10 241.729
11: 2016 11 241.353
12: 2016 12 241.432
> daily
date year month close
1: 2016-01-04 2016 1 2012.66
2: 2016-01-05 2016 1 2016.71
3: 2016-01-06 2016 1 1990.26
4: 2016-01-07 2016 1 1943.09
5: 2016-01-08 2016 1 1922.03
---
248: 2016-12-23 2016 12 2263.79
249: 2016-12-27 2016 12 2268.88
250: 2016-12-28 2016 12 2249.92
251: 2016-12-29 2016 12 2249.26
252: 2016-12-30 2016 12 2238.83
> daily[monthly, on=c("year","month")]
date year month close CPI
1: <NA> 2016 0 NA 236.916
2: 2016-01-04 2016 1 2012.66 237.111
3: 2016-01-05 2016 1 2016.71 237.111
4: 2016-01-06 2016 1 1990.26 237.111
5: 2016-01-07 2016 1 1943.09 237.111
---
228: 2016-11-23 2016 11 2204.72 241.432
229: 2016-11-25 2016 11 2213.35 241.432
230: 2016-11-28 2016 11 2201.72 241.432
231: 2016-11-29 2016 11 2204.66 241.432
232: 2016-11-30 2016 11 2198.81 241.432
> merge(monthly, daily, by=c("year","month"), all=TRUE)
year month CPI close
1: 2016 0 236.916 NA
2: 2016 1 237.111 2012.66
3: 2016 1 237.111 2016.71
4: 2016 1 237.111 1990.26
5: 2016 1 237.111 1943.09
---
249: 2016 12 NA 2263.79
250: 2016 12 NA 2268.88
251: 2016 12 NA 2249.92
252: 2016 12 NA 2249.26
253: 2016 12 NA 2238.83
のデータフレームを使用してインデックスに別のデータフレームは良いアイデアのように見えるしていません。 あなたの最善の策は 'merge()'です。 'by = 'month' 'を使ってマージしたいカラムを指定し、' all.x = T'や 'all.y = T'を使ってSQLの外部ジョインを再作成することができます。 – Balter
あなたは毎日[毎月、on = c( "year"、 "month")] 'したいと思う。 – lmo
@Balter data.tablesでは、 'x [i]'は左結合です(...私はそれが呼ばれていると思います)。 "index"表記法は、 'X [Y]'が行列とどのように動作するのかと同様に、 'x'の' i'の各行を検索するので使用されます。 – Frank