0

データテーブルでルックバック操作を行いたいです。単一のデータテーブルでそれを行いたいのですが、物事を適切にエイリアスする方法を理解できませんでした。「結合」の両側で日付列を明確にエイリアスする方法が必要だと思います。

代わりに、データ テーブルをコピーし、データ テーブルの 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  
4

1 に答える 1