これは私を夢中にさせています。毎月の在庫データを含む大きな data.table があります。毎年 6 月に、会計変数に基づいて、すべての株式を 10 のポートフォリオの 1 つに割り当てます。割り当てられたポートフォリオ変数を次の 11 か月に繰り越して、来年 6 月に各株式が新しいポートフォリオ 1 から 10 に割り当てられるまで続けたいと思います。na.locf
基本的に私が探しているものですが、2つの問題が発生しています:
- 一部の銘柄は、翌年の十分な会計データが不足しているため、その年のポートフォリオに割り当てるべきではありません (つまり、ポートフォリオ変数は NA のままにする必要があります)。もちろん
na.locf
、ポートフォリオ番号は新しい番号が出るまで繰り越されます。 - 一部の銘柄は、たとえば 3 か月後に上場廃止になる可能性があるため、11 か月分のデータがありません。
そのため、最後の観測を来年 6 月 (新しいポートフォリオ番号があるとき) まで最大 11 回繰り越すコードを探しています。
これがna.locf
現在の 2 つの問題の解決策です (PERMNO は株式識別子です)。
COMPUSTAT_CRSP_IBES1[,
Portfolio_Monthly := na.locf(Portfolio_Monthly,
na.rm = FALSE),
by = PERMNO]
使用しようとしましrep
たが、まったく機能しませんでした:
COMPUSTAT_CRSP_IBES1[,
Portfolio_Monthly := if_else(!is.na(Portfolio_Monthly),
rep(Portfolio_Monthly, 11),
NA),
by = PERMNO]
ヒントをありがとう!