了解rleid行为,以及有条件重置的总和

了解rleid行为,以及有条件重置的总和,r,data.table,cumsum,R,Data.table,Cumsum,这是apcpDW=setDT(apcpDW)[,RAIN:=cumsum(wm),by=rleid(wday==2)]的输出。: 为什么运行总和在wday2和3之间不继续?它在2之前重置,然后在2之后再次重置。要将wm的和从2转换到下一个1,我需要做哪些更改?(即,wday1将始终具有最大值,随后的2将正好是wm,然后3将是2+3…等等)您可以检查DT[,rleid(wday==2)]以查看它的外观。如果您希望运行的总和继续,请省略by=rleid>(wday==2)part@Frank,它看起

这是apcpDW=setDT(apcpDW)[,RAIN:=cumsum(wm),by=rleid(wday==2)]的输出。:


为什么运行总和在
wday
2
3
之间不继续?它在
2
之前重置,然后在
2
之后再次重置。要将
wm
的和从
2
转换到下一个
1
,我需要做哪些更改?(即,
wday
1
将始终具有最大值,随后的
2
将正好是
wm
,然后
3
将是
2+3
…等等)

您可以检查
DT[,rleid(wday==2)]
以查看它的外观。如果您希望运行的总和继续,请省略
by=rleid>(wday==2)
part@Frank,它看起来像是一种运行的
id
(?)当它达到
2
时会增加,然后在
2
之后再次增加…我想我的问题是为什么会有这个双增量?你可以用
setDT(apcpDW)[,RAIN:=cumsum(wm),by=rleid(cumsum(wday==2))]
。阅读
?rleid
并按照Frank提到的结果玩游戏是值得的。注意
rleid(cumsum(wday==2))
cumsum(wday==2)+1相同
    timestamp           wm wday         RAIN
 1: 1998-01-01  0.000000000    5  0.000000000
 2: 1998-01-02  0.005644862    6  0.005644862
 3: 1998-01-03  1.580885557    7  1.586530419
 4: 1998-01-04  7.033152468    1  8.619682888
 5: 1998-01-05  8.254771325    2  8.254771325
 6: 1998-01-06  7.309265805    3  7.309265805
 7: 1998-01-07  8.914006707    4 16.223272512
 8: 1998-01-08 13.836810823    5 30.060083334
 9: 1998-01-09  5.516107500    6 35.576190834
10: 1998-01-10  0.201572931    7 35.777763765