【发布时间】:2021-07-13 05:39:45
【问题描述】:
这与R: use the newly generated data in the previous row有关
我意识到我面临的实际问题比我在上面的线程中给出的示例要复杂一些 - 似乎我必须将 3 个参数传递给递归计算才能实现我想要的。因此,accumulate2 或 reduce 可能不起作用。所以我在这里打开一个新问题以避免可能的混淆。
我有以下按 ID 分组的数据集:
ID <- c(1, 2, 2, 3, 3, 3)
pw <- c(1:6)
add <- c(1, 2, 3, 5, 7, 8)
x <- c(1, 2, NA, 4, NA, NA)
df <- data.frame(ID, pw, add, x)
df
ID pw add x
1 1 1 1 1
2 2 2 2 2
3 2 3 3 NA
4 3 4 5 4
5 3 5 7 NA
6 3 6 8 NA
在x 列的每个组中,我想保持第一行的值不变,同时用提高到存储在pw 中的幂的滞后值填充剩余的行,并添加到指数add 中的值。我想在继续进行时更新滞后值。所以我想拥有:
ID pw add x
1 1 1 1 1
2 2 2 2 2
3 2 3 3 2^3 + 3
4 3 4 5 4
5 3 5 7 4^5 + 7
6 3 6 8 (4^5 + 7)^6 + 8
我必须将此计算应用于大型数据集,所以如果有一种快速的方法来做到这一点,那就完美了!
【问题讨论】:
-
do.call(rbind, Reduce(function(x, y)if(is.na(y$x))modifyList(x, list(x=x$x^y$pw+y$add)) else y,split(df, seq(nrow(df))), accumulate = TRUE)) -
虽然 akrun 已经展示了如何在这里正确解决它,但我仍然曾经在
accumulate中传递了超过 2 个参数。如果您想知道如何,请参阅this 问题。不过,它也可以通过 for 循环来解决。 -
@AnilGoyal 非常感谢!这非常有帮助。
标签: r iteration rolling-computation accumulate