计算连续失败的次数及其开始和结束日期

count the consecutive fails in a row together with its start and end date

我有一个 data.frame 日期和失败。现在我想统计每个周期的连续失败次数以及开始日期和结束日期。

例如,

data <- data.frame(date = seq.Date(as.Date("2019-01-01"), by = "days",length.out = 14), 
                     fail = c(1,1,0,0,0,1,1,1,1,0,1,0,0,0))

         date fail
1  2019-01-01    1
2  2019-01-02    1
3  2019-01-03    0
4  2019-01-04    0
5  2019-01-05    0
6  2019-01-06    1
7  2019-01-07    1
8  2019-01-08    1
9  2019-01-09    1
10 2019-01-10    0
11 2019-01-11    1
12 2019-01-12    0
13 2019-01-13    0

结果应该是

  duration      start        end
        2 2019-01-01 2019-01-02
        4 2019-01-06 2019-01-09
        1 2019-01-11 2019-01-11

我尝试使用失败指数的差异来获得所需的结果。但是,我正在努力获得结果。任何帮助将不胜感激。

一个dplyr选项可以是:

data %>%
 group_by(rleid = with(rle(fail), rep(seq_along(lengths), lengths))) %>%
 filter(fail == 1) %>%
 summarise(n = n(),
           start = min(date),
           end = max(date)) %>%
 ungroup() %>%
 select(-rleid)

      n start      end       
  <int> <date>     <date>    
1     2 2019-01-01 2019-01-02
2     4 2019-01-06 2019-01-09
3     1 2019-01-11 2019-01-11