使用r中先前计算的行值

使用r中先前计算的行值,r,data.table,lag,shift,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 对此有什么想法吗 我认为shift对滞后有很大的帮助,但我不知道如何消除它在第一时间产生的NA?我们可以取B列前20行的平均值,然后

我有一个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
对此有什么想法吗


我认为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

尝试
库(RcppRoll);DT[,D:=cumsum(roll_mean(B,20))]
示例数据没有20行,因此未对其进行测试。您是否只取前20行的平均值,而不进行扩展?我认为他们没有扩展平均值。求一次平均值,加上C列after@PierreLafortune没有一个可复制的例子,我不知道。我已经更新了例子,包括20行,希望这有帮助这是很好的,谢谢!如果我不加C,而是想把它乘以一个数字会怎么样?谢谢@davidernburg。shift的使用很好,但我在新的一年里没有得到相同的总数column@KhalidN你有一列像
C
这样的数字还是一个值?好的,最后一次尝试,
DT[,D:=mean(B[1:20])+cumsum(C(0L,shift(C,1L,type=“lead”)[-.N])
如果我们能做
C[-1],这有点傻
:)@pierrelaffortune它是一个值,不是一列数字
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