在 r 中使用先前计算的行值

Use previous calculated row value in r

我有一个 data.table 看起来像这样:

DT <- data.table(A=1:20, B=1:20*10, C=1:20*100)
DT
    A  B   C
1:  1  10  100
2:  2  20  200
3:  3  30  300
4:  4  40  400
5:  5  50  500
...
20: 20 200 2000

我希望能够计算一个新列"D",其第一个值为 B 列中前 20 行的平均值作为第一个值,然后我想使用第一行D 列的值,以帮助计算 D 的下一行值。

假设 B 列前 20 行的平均值为 105。D 列中下一行的公式为:DT$D[1]+DT$C[2] 我在其中获取 D 的前一行值并添加 C 的行值。 第三行将如下所示:DT$D[2]+DT$C[3]

    A  B   C    D
1:  1   10   100     105
2:  2   20   200     305
3:  3   30   300     605
4:  4   40   400    1005
5:  5   50   500    1505
...
20: 20  200  2000  21005

有什么想法吗?

我认为 shift 对滞后有很大帮助,但不知道如何摆脱它一开始产生的 NA?

我们可以取B列前20行的平均值加上C的累加和。累积总和有一个特殊的考虑,我们要添加 0 和 C 列的串联,而不是第一个值。

DT[, D := mean(B[1:20]) + cumsum(c(0, C[-1]))][]
#      A   B    C     D
#  1:  1  10  100   105
#  2:  2  20  200   305
#  3:  3  30  300   605
#  4:  4  40  400  1005
#  5:  5  50  500  1505
#  6:  6  60  600  2105
#  7:  7  70  700  2805
#  8:  8  80  800  3605
#  9:  9  90  900  4505
# 10: 10 100 1000  5505
# 11: 11 110 1100  6605
# 12: 12 120 1200  7805
# 13: 13 130 1300  9105
# 14: 14 140 1400 10505
# 15: 15 150 1500 12005
# 16: 16 160 1600 13605
# 17: 17 170 1700 15305
# 18: 18 180 1800 17105
# 19: 19 190 1900 19005
# 20: 20 200 2000 21005