データテーブルでルックバック操作を行いたいです。単一のデータテーブルでそれを行いたいのですが、物事を適切にエイリアスする方法を理解できませんでした。「結合」の両側で日付列を明確にエイリアスする方法が必要だと思います。
代わりに、データ テーブルをコピーし、データ テーブルの 1 つでキー列の名前を変更してルックバックを許可しました。
これが私が持っているものです
library(data.table)
DT <- data.table(
Date = as.Date(c("2013-5-4", "2013-5-9", "2013-5-16", "2013-5-19","2013-5-23", "2013-5-26", "2013-5-29", "2013-6-2","2013-6-10")),
V1 = c(1,1,1,3,4,9, 2, 3, 1)
)
データテーブルをコピーし、1 つのキー列名を変更し、ルックバック計算を行うコードは次のとおりです。
DT2<-data.table(DT) # copy the whole table
setnames(DT2,c("DDate",unlist(names(DT2)[2:length(names(DT2))]))) # changes the column name for date
# add a column in DT by looking up values in DT2
DT[, lookbackmean:=mean(DT2[DT2$DDate < .SD[,Date],V1]),by=Date][, lookback:= paste0(DT2[DT2$DDate < .SD[,Date], V1],collapse=","),by=Date]
これが出力です。注: 各日付の平均値と見なされる値を示す、lookback という列を作成しました。
Date V1 lookbackmean lookback
1: 2013-05-04 1 NaN
2: 2013-05-09 1 1.000000 1
3: 2013-05-16 1 1.000000 1,1
4: 2013-05-19 3 1.000000 1,1,1
5: 2013-05-23 4 1.500000 1,1,1,3
6: 2013-05-26 9 2.000000 1,1,1,3,4
7: 2013-05-29 2 3.166667 1,1,1,3,4,9
8: 2013-06-02 3 3.000000 1,1,1,3,4,9,2
9: 2013-06-10 1 3.000000 1,1,1,3,4,9,2,3
データテーブルのコピーを作成せずに発生する問題は次のとおりです
データテーブルをそれ自体に結合しますが、値は計算しません。問題は、結合のデータ列を区別できないことだと思います。
DT[, lookbackmean:=mean(DT[DT$DDate < .SD[,Date],V1]),by=Date]
[, lookback:= paste0(DT[DT$DDate < .SD[,Date], V1],collapse=","),by=Date]
Date V1 lookbackmean lookback
1: 2013-05-04 1 NaN
2: 2013-05-09 1 NaN
3: 2013-05-16 1 NaN
4: 2013-05-19 3 NaN
5: 2013-05-23 4 NaN
6: 2013-05-26 9 NaN
7: 2013-05-29 2 NaN
8: 2013-06-02 3 NaN
9: 2013-06-10 1 NaN