我有一个包含2列的数据框:
> 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 8 1
9 9 0
10 10 1
我希望获得列x
(cumsum(df$x)
)的累积总和,但是在1
列中出现y
后,应该重置总和。这是我要找的结果:
1
3
6
10
5
6
13
21
9
19
我如何在R?
中实现这一目标答案 0 :(得分:4)
您可以使用ave
:
ave(d$x,c(0,cumsum(d$y[-nrow(d)])),FUN=cumsum)
# [1] 1 3 6 10 5 6 13 21 9 19
答案 1 :(得分:3)
使用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