在data.table计算中引用先前的值

时间:2018-12-10 12:45:08

标签: r data.table

我正在尝试在当前计算期间引用先前计算中的值。我试过使用shift(),但是在使用相同的变量时它不起作用。

 x  
 1  
 2  
 3  
 5  
 1

我想做这样的事情。我希望shift(z)引用同一变量的先前计算值。如果运行此命令,则会收到一条错误消息,提示未找到对象“ z”。

dt[, z := 0.1 * x + 0.2 * shift(z)]

如何在不编写循环的情况下做到这一点?

1 个答案:

答案 0 :(得分:2)

我们需要使用accumulate

的逻辑
library(tidyverse)
dt %>% 
  mutate(z = tail(accumulate(x, ~ .y * 0.1 + 0.2 * .x, .init = 0), -1))
#  x       z
#1 1 0.10000
#2 2 0.22000
#3 3 0.34400
#4 5 0.56880
#5 1 0.21376

或与Reduce

相同的逻辑
dt[, z := tail(Reduce(function(x, y)  y * 0.1 + 0.2 * x, x, 
     init = 0, accumulate = TRUE), -1)]