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

时间:2015-10-28 12:55:15

标签: r data.table lag shift

我有一个看起来像这样的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

对此有何想法?

我认为转变会对延迟有很大的帮助,但是不知道如何摆脱它在第一时间产生的NA?

1 个答案:

答案 0 :(得分:3)

我们可以取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