基于另一列(R)的值的列的累积总和

时间:2015-01-16 21:59:33

标签: r

我有一个包含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

我希望获得列xcumsum(df$x))的累积总和,但是在1列中出现y后,应该重置总和。这是我要找的结果:

1
3
6
10
5
6
13
21
9
19

我如何在R?

中实现这一目标

2 个答案:

答案 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