R在数据表中创建回望操作

R在数据表中创建回望操作,r,data.table,R,Data.table,我想对数据表执行回溯操作。我更喜欢使用单个数据表,但还没有弄清楚如何正确地使用别名。我想我需要一种方法来清楚地在“join”的每一侧别名日期列 相反,我复制了datatable并更改了其中一个datatable中键列的名称以允许回溯 这是我得到的 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", "201

我想对数据表执行回溯操作。我更喜欢使用单个数据表,但还没有弄清楚如何正确地使用别名。我想我需要一种方法来清楚地在“join”的每一侧别名日期列

相反,我复制了datatable并更改了其中一个datatable中键列的名称以允许回溯

这是我得到的

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)
)
我在没有创建datatable副本的情况下遇到的问题如下

将数据表连接回自身,但不计算值。我认为问题在于它无法区分联接中的数据列

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  
DT[,lookbackmean:=mean(DT[DT$DDate<.SD[,Date],V1]),by=Date]
[,lookback:=paste0(DT[DT$DDate<.SD[,Date],V1],collapse=“,”,by=Date]
日期V1回望平均回望
1:2013-05-04 1楠
2:2013-05-09 1楠
3:2013-05-16 1南
4:2013-05-19 3南
5:2013-05-23 4南
6:2013-05-26 9南
7:2013-05-29 2南
8:2013-06-02 3南
9:2013-06-10 1南

我想我现在质疑你想要的结果:

> DT[, lookbackmean:=  head(c(NA,cumsum(V1)/(1:.N)),-1) ]
> DT
         Date V1 lookbackmean 
1: 2013-05-04  1           NA 
2: 2013-05-09  1     1.000000 
3: 2013-05-16  1     1.000000 
4: 2013-05-19  3     1.000000 
5: 2013-05-23  4     1.500000 
6: 2013-05-26  9     2.000000 
7: 2013-05-29  2     3.166667 
8: 2013-06-02  3     3.000000 
9: 2013-06-10  1     3.000000 

我想你可能真的不想要累积平均数,在这种情况下,你应该看看这么多需要数据的问题。使用索引的表格示例:

你的数学不是等价的。不确定2013-05-19如何确定1.66667。唯一有意义的是使用行2:4/count(3)=5/3。这不是它需要的工作方式。上面的回溯值显示,当天的值应为(1+1+1)/3(该日期之前的所有值)。i、 e.
DT2[DT2$DDate<.SD[,Date],V1]
您能告诉我一个索引示例吗?我看到的是对当前行/组中的列进行索引。这是一个轻微的编辑,可以得到所需的结果:
DT[,bah:=head(c(NA,cumsum(V1)/(1.N)),-1)]
谢谢,Frank。。。将合并。
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  
> DT[, lookbackmean:=  head(c(NA,cumsum(V1)/(1:.N)),-1) ]
> DT
         Date V1 lookbackmean 
1: 2013-05-04  1           NA 
2: 2013-05-09  1     1.000000 
3: 2013-05-16  1     1.000000 
4: 2013-05-19  3     1.000000 
5: 2013-05-23  4     1.500000 
6: 2013-05-26  9     2.000000 
7: 2013-05-29  2     3.166667 
8: 2013-06-02  3     3.000000 
9: 2013-06-10  1     3.000000