R 在data.table计算中引用以前的值
我试图在当前计算期间引用上一次计算中的值。我尝试过使用shift(),但在使用同一个变量时它不起作用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
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是列表中的元素