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

900*_*_db 1 aggregate r counting sequence dataframe

我有一个带日期的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
Run Code Online (Sandbox Code Playgroud)

结果应该是

  duration      start        end
        2 2019-01-01 2019-01-02
        4 2019-01-06 2019-01-09
        1 2019-01-11 2019-01-11
Run Code Online (Sandbox Code Playgroud)

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

tmf*_*mnk 5

一种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
Run Code Online (Sandbox Code Playgroud)