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

R 在data.table计算中引用以前的值,r,data.table,R,Data.table,我试图在当前计算期间引用上一次计算中的值。我尝试过使用shift(),但在使用同一个变量时它不起作用 x 1 2 3 5 1 我想做这样的事。我希望shift(z)指的是之前计算的同一变量的值。如果我运行这个,我会得到一个错误,说找不到对象“z” dt[, z := 0.1 * x + 0.2 * shift(z)] 如何在不编写循环的情况下执行此操作?我们需要一个带有累加的逻辑 library(tidyverse) dt %>% mutate(z

我试图在当前计算期间引用上一次计算中的值。我尝试过使用shift(),但在使用同一个变量时它不起作用

 x  
 1  
 2  
 3  
 5  
 1
我想做这样的事。我希望shift(z)指的是之前计算的同一变量的值。如果我运行这个,我会得到一个错误,说找不到对象“z”

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

如何在不编写循环的情况下执行此操作?

我们需要一个带有
累加的逻辑

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)]

管它:
dt[,z:=0.1*x+0.2][,z:=z*shift(z)]
我希望第一个从零开始。然后使用上一行中的值。所以,(0.1*1+0.2*0)将是第一行。第二个是(0.1*2+0.2*0.1(第一行的值))。YOLO,这不影响操作顺序吗?在做加法之前,我想乘以之前的z值。想要的输出不清楚。在阅读你的解时,有时我觉得自己什么都不知道。x和y部分是什么意思?@YOLO这一部分有点棘手,但你会习惯的。这只是理解递归logic@buckbeak此处,
.x
指的是更新后的值,
.y
指的是实际值。您可以通过
dt%>%mutate(z=tail(acculate(x,~.x,.init=0),-1))
dt%>%mutate(z=tail(acculate(x,~.y,.init=0),-1))
@buckbick检查它,如果您检查
?acculate
的话,说明是
。\x是累加值1:10%>%acculater(.x)\y是列表中的元素