【发布时间】:2019-07-10 09:50:56
【问题描述】:
如果 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))
sum 是我想要的输出
理想情况下使用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))
sum 是我想要的输出
理想情况下使用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
【讨论】: