считать последовательные ошибки подряд вместе с датой начала и окончания - PullRequest
1 голос
/ 28 октября 2019

У меня есть 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

Я пытался получить желаемые результаты, используя разность индексов сбоев. Однако я изо всех сил пытаюсь получить результат. О любой помощи будет высоко ценится.

1 Ответ

5 голосов
/ 28 октября 2019

Один 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
...