累积总和直到某个值

时间:2018-04-02 13:34:39

标签: r

我有一些与我合作的学年的数据。变量是SchoolYear,Aug,Sep,Oct,...,May,June,其中每个月对应于该月的参与者数量。我需要总结几个月,直到缺少信息,在这种情况下由0确定。我已经尝试了

yeardf <-within(yeardf,{
  Max_enroll<-cummax(Sep)
  Enroll_To_Date<-cumsum(Sep)
}
)

1973-74,0,0,4,2,14,26,22,8,0,99,
1974-75,0,0,4,26,10,23,10,14,0,91,

虽然在Enroll_To_Date行上设置了Sep> 0的条件但是还没有成功。

1 个答案:

答案 0 :(得分:0)

将数据设置为列表和数据框:

> row1 <- c("1973-74",0,0,4,2,14,26,22,8,0,99)
> row2 <- c("1974-75",0,0,4,26,10,23,10,14,0,91)
> df <- rbind(row1,row2)

可以像这样找到row1的累积总和,看起来你想捕获76(它达到零点):

> (z <- cumsum(row1[2:length(row1)]))
 [1]   0   0   4   6  20  46  68  76  76 175

这是获得它的一种方法。首先在列表中找到具有值的位置:

> which(duplicated(lead(cumsum(row1[2:length(row1)]))))
[1] 8

然后在该值处查找累积总和:

> z[which(duplicated(lead(cumsum(row1[2:length(row1)]))))]
[1] 76

所以这是你row2的计算:

> z <- cumsum(row2[2:length(row2)])
> z[which(duplicated(lead(cumsum(row2[2:length(row2)]))))]
[1] 87

如果您想要执行大量操作,例如在数据框df中,请在函数中将它们链接在一起,并在所有行(apply)上使用1你的数据框:

> apply(df,1,function(x) cumsum(x[2:length(x)])[which(duplicated(lead(cumsum(x[2:length(x)]))))])
row1 row2 
  76   87