R 创建累积计数,直到前6行中的2行满足条件

R 创建累积计数,直到前6行中的2行满足条件,r,dplyr,tidyverse,R,Dplyr,Tidyverse,如果a列等于1,我想开始一个累积和。我想在前6行中的2行等于0时停止 dplyr::tibble(a = c(1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1), sum = c(1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 0, 1, 2, 3)) 总和是我想要的输出 理想情况下,使用tidyverse一种方法是找出在6行间隔内发现两个连续0的行,然后使用cumsum创建组,并最终在每组中获取cumsum值 library(

如果a列等于1,我想开始一个累积和。我想在前6行中的2行等于0时停止

dplyr::tibble(a = c(1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1), 
          sum = c(1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 0, 1, 2, 3))
总和是我想要的输出


理想情况下,使用
tidyverse

一种方法是找出在6行间隔内发现两个连续0的行,然后使用
cumsum
创建组,并最终在每组中获取
cumsum

library(dplyr)
library(purrr)

df %>%
   mutate(sum1 = map_dbl(seq_along(a), ~sum(a[. : max(.-6, 1)] == 0) >= 2)) %>%
   group_by(group = cumsum(sum1 != lag(sum1, default = first(sum1)))) %>%
   mutate(ans = cumsum(a)) %>%
   ungroup %>%
   select(-sum1, -group)

# A tibble: 14 x 2
#      a   ans
#   <dbl> <dbl>
# 1     1     1
# 2     1     2
# 3     1     3
# 4     1     4
# 5     1     5
# 6     1     6
# 7     1     7
# 8     1     8
# 9     0     8
#10     1     9
#11     0     0
#12     1     1
#13     1     2
#14     1     3
库(dplyr)
图书馆(purrr)
df%>%
突变(sum1=map_dbl(沿(a)方向的序列)~sum(a[:max(-6,1)]==0)>=2))%>%
group_by(group=cumsum(sum1!=lag(sum1,默认值=first(sum1)))%>%
突变(ans=cumsum(a))%>%
解组%>%
选择(-sum1,-组)
#一个tibble:14x2
#安斯
#    
# 1     1     1
# 2     1     2
# 3     1     3
# 4     1     4
# 5     1     5
# 6     1     6
# 7     1     7
# 8     1     8
# 9     0     8
#10     1     9
#11     0     0
#12     1     1
#13     1     2
#14     1     3