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)
我尝试使用失败索引的差异来获得所需的结果。但是,我正在努力获得结果。关于任何帮助将不胜感激。
一种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)