首页 > 解决方案 > 在时间序列中查找不同的范围

问题描述

我想知道如何在时间序列中找到几个范围。我有这个时间序列:

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"

有人知道该怎么做吗?谢谢

标签: r

解决方案


一种选择是通过获取相邻元素的差异来创建分组列并使用它来创建范围

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使用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"

数据

df1 <- structure(list(DATE = c("1996-01-01", "1996-01-02", "1996-01-03", 
"1998-07-13", "1998-07-14", "1998-07-15", "2000-05-28")),
class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7"))

推荐阅读