繁体   English   中英

在 R 中对不间断日期范围进行分组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM