计算连续失败的次数及其开始和结束日期
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
我有一个 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