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