了解rleid行为,以及有条件重置的总和
这是apcpDW=setDT(apcpDW)[,RAIN:=cumsum(wm),by=rleid(wday==2)]的输出。:了解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,它看起
为什么运行总和在
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