我正在尝试在当前计算期间引用先前计算中的值。我试过使用shift(),但是在使用相同的变量时它不起作用。
x
1
2
3
5
1
我想做这样的事情。我希望shift(z)引用同一变量的先前计算值。如果运行此命令,则会收到一条错误消息,提示未找到对象“ z”。
dt[, z := 0.1 * x + 0.2 * shift(z)]
如何在不编写循环的情况下做到这一点?
答案 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)]