条件累积和

ECI*_*CII 2 r

我有这个数据框

t<-data.frame(v1=c(1,2,1,4,6,7,8,2,3,4,8,1,2), v2=c(2,3,6,1,-3,-2,1,2,-3,6,7,-2,1))
Run Code Online (Sandbox Code Playgroud)

从上到下扫描data.frame,只要v2为正,我想获得v1的累积和.当v2变为负数时,它应该停止,记录(到那时为止的cum.sum)的值,并且累计和应该从下一个第一个正v2重新开始,依此类推.因此,最终对于上述数据帧将是向量

8, 10 , 12, 2
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Luc*_*zer 5

我更改了data.frame的名称,因为t是一个函数(转置).如果你只想要总和,我不明白你为什么要使用cumsum.

dtf<-data.frame(v1=c(1,2,1,4,6,7,8,2,3,4,8,1,2), v2=c(2,3,6,1,-3,-2,1,2,-3,6,7,-2,1))
groups  <- rle(dtf$v2 > 0)

dtf$groups<- rep(seq_along(groups$values), groups$lengths)
library(plyr)
daply(dtf, .(groups), function(x) sum(x$v1))[groups$values]
 1  3  5  7 
 8 10 12  2 
Run Code Online (Sandbox Code Playgroud)