【发布时间】:2020-05-14 23:27:12
【问题描述】:
我正在尝试在我的数据中计算一个新列,其中每一行使用前一行的滞后,第一行使用值 0。我试图在 tidyverse 中执行此操作,但可以好像没弄好。
数据如下所示:
library(tidyverse)
sample <- 1:10
var <- c(10, 5, 16, 12, 13, 4, 17, 20, 10, 7)
df <- data.frame(sample, var)
我的新列名为new_var,计算方式为lag(new_var) + sample_i - target - k)。
我尝试过使用accumulate() 函数,但似乎无法正确使用。这是我所在的位置:
target <- 11
k <- 2
df %>%
mutate(new_var = accumulate(.y = var,
.f = ~.x + .y - target - k,
.x = 0))
预期的输出是:
(-3, 3, 5,-1, 0, -9, 4, 7, -3, 6)
我在 excel 中处理它以显示它的外观:
为了得出这个结论,样本 1 的“实际 new_var”列中的等式如下(使用 0 作为初始等式中的第一个数字):
O2 + K7 - $O$3 - $O$4
并且每个后续样本都滞后于“new_var”列(将 Target 和 K 保持为常数,并使用滞后值作为等式中的第一个数字):
O3 + K8 - $O$3 - $O$4
【问题讨论】:
-
是的,我刚刚编辑它以显示
(-8, -5, -6, -6, -15, -11, -4, -7, -13)的预期输出 -
@user3585829 你能解释一下前几个值的计算吗?你是怎么得到
-8, -5, -6的? -
我在编辑的答案中更明确地说明了这一点。
-
是的,抱歉,我意识到我没有很好地解释这一点。第二个值实际上应该是 -11。对于值 1,等式为 0 + 10 - 11 - 2 = -3,对于值 2,则等式为 -3 + 5 - 11 - 2 = -11。对不起。希望这是有道理的。