I have a data frame with 2 columns like this:
> data.frame(x=1:10, y=c(0,0,0,1,1,0,0,1,0,1)) x y 1 1 0 2 2 0 3 3 0 4 4 1 5 5 1 6 6 0 7 7 0 8
A data.table method using shift
data.table
shift
library(data.table) #devel version `data.table_1.9.5` setDT(d)[, cumsum(x), by = cumsum(shift(y, fill=0))]$V1 #[1] 1 3 6 10 5 6 13 21 9 19
You can achieve that by using ave:
ave
ave(d$x,c(0,cumsum(d$y[-nrow(d)])),FUN=cumsum) # [1] 1 3 6 10 5 6 13 21 9 19