我想知道如何按时间顺序找到多个范围。 我有这个时间顺序:
DATE
1 1996-01-01
2 1996-01-02
3 1996-01-03
4 1998-07-13
5 1998-07-14
6 1998-07-15
7 2000-05-28
我想拥有所有这样的时间范围:
[1] "1996-01-01" "1996-01-03"
[2] "1998-07-13" "1998-07-15"
[3] "2000-05-28"
有人知道该怎么做吗? 谢谢
答案 0 :(得分:2)
一种选择是通过获取相邻元素的差值并使用其创建范围来创建分组列
library(dplyr)
library(lubridate)
df1 %>%
mutate(DATE= ymd(DATE)) %>%
group_by(grp = cumsum(c(TRUE, diff(DATE) > 1))) %>%
summarise(min = min(DATE), max = max(DATE))
# A tibble: 3 x 3
# grp min max
# <int> <date> <date>
#1 1 1996-01-01 1996-01-03
#2 2 1998-07-13 1998-07-15
#3 3 2000-05-28 2000-05-28
或者使用base R
的{{1}}
split
lapply(with(df1, split(DATE, cumsum(c(TRUE, diff(as.Date(DATE)) > 1)))),
function(x) unique(range(x)))
#$`1`
#[1] "1996-01-01" "1996-01-03"
#$`2`
#[1] "1998-07-13" "1998-07-15"
#$`3`
#[1] "2000-05-28"