[英]Grouping non-breaking date ranges in R
我这里有这种数据是dput
df <- structure(list(start_date = structure(c(18312, 18313, 18314,
18316, 18317, 18318, 18319, 18320, 18321), class = "Date")), row.names = c(NA,
-9L), class = "data.frame")
看起来如此;
start_date
<date>
1 2020-02-20
2 2020-02-21
3 2020-02-22
4 2020-02-24
5 2020-02-25
6 2020-02-26
7 2020-02-27
8 2020-02-28
9 2020-02-29
我想创建一个汇总表,其中涵盖每个非中断日期范围的开始和结束日期。 所需的 output 看起来如此;
start end
<date> <date>
1 2020-02-20 2020-02-22
2 2020-02-24 2020-02-29
也欢迎data.table
解决方案。
提前致谢。
使用折叠 package 按seqid(start_date)
对日期进行分组。
library(collapse)
library(dplyr)
df %>%
group_by(group = seqid(start_date)) %>%
summarize(start = min(start_date), end = max(start_date), .groups = "drop")
## # A tibble: 2 × 3
## group start end
## <qG> <date> <date>
## 1 1 2020-02-20 2020-02-22
## 2 2 2020-02-24 2020-02-29
您可以使用cumsum(c(1, diff(start_date) != 1))
查找连续日期。
library(dplyr)
df %>%
group_by(id = cumsum(c(1, diff(start_date) != 1))) %>%
summarise(start = first(start_date), end = last(start_date))
# # A tibble: 2 × 3
# id start end
# <dbl> <date> <date>
# 1 1 2020-02-20 2020-02-22
# 2 2 2020-02-24 2020-02-29
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.