如果R中的值为1,如何查找累积总和,然后重新启动它?

有时我们想找到条件累积和,如果出现特定值,这些条件可以重置累积。例如,找到一个可变帧的累积和,但是如果出现1,则重新开始求和。在R中,我们可以在with,ave和cumusum函数的帮助下执行此操作,如以下示例所示。

例1

请看以下数据帧:

> ID<-1:20
> Ratings<-sample(0:2,20,replace=TRUE)
> df1<-data.frame(ID,Ratings)
> df1

输出结果

 ID Ratings
1 1   0
2 2   2
3 3   0
4 4   0
5 5   0
6 6   2
7 7   1
8 8   0
9 9   1
10 10 2
11 11 2
12 12 1
13 13 1
14 14 0
15 15 0
16 16 2
17 17 0
18 18 0
19 19 1
20 20 0

查找累积和,如果出现1,则重新启动:

示例

> df1<-with(df1,ave(Ratings,cumsum(Ratings==1),FUN=cumsum))
> df1

输出结果

[1] 0 2 2 2 2 4 1 1 1 3 5 1 1 1 1 3 3 3 1 1

例2

> x<-1:20
> y<-sample(1:4,20,replace=TRUE)
> df2<-data.frame(x,y)
> df2

输出结果

  x y
1 1 2
2 2 2
3 3 1
4 4 1
5 5 3
6 6 2
7 7 2
8 8 3
9 9 1
10 10 4
11 11 2
12 12 1
13 13 1
14 14 3
15 15 2
16 16 2
17 17 1
18 18 4
19 19 4
20 20 4

查找累积和,如果出现1,则重新启动:

示例

> df2<-with(df2,ave(y,cumsum(y==1),FUN=cumsum))
> df2

输出结果

[1] 2 4 1 1 4 6 8 11 1 5 7 1 1 4 6 8 1 5 9 13