首页 > 解决方案 > 如何检查日期是否在一年中的指定时间内

问题描述

假设我有一个三年的时间序列,如下所示:

library(lubridate)
ts1 <- seq(ymd('2016-01-01'), ymd('2018-12-31'), '1 day')

现在我想指定一年中的某个时间,例如北半球的天文夏季,从 6 月 21 日开始,到 9 月 23 日结束,并检查我的ts1向量的哪些元素属于这个范围。我怎么能做到这一点,充其量是 lubridate,但不是必须的?

标签: rdatelubridatebase

解决方案


我会创建一个新的日期变量,将所有日期放在同一年,然后检查:

library(lubridate)
library(dplyr)
ts1 <- seq(ymd('2016-01-01'), ymd('2018-12-31'), '1 day')
df <- data_frame(odate = ts1)
df %>% mutate(temp_date = ymd(format(odate, "2000-%m-%d"))) %>%
    mutate(in_summer = temp_date %in% 
                        seq(ymd('2000-06-21'), ymd('2000-09-23'), '1 day')) %>%
    select(-temp_date)
## # A tibble: 1,096 x 2
##    odate      in_summer
##    <date>     <lgl>    
##  1 2016-01-01 FALSE    
##  2 2016-01-02 FALSE    
##  3 2016-01-03 FALSE    
##  4 2016-01-04 FALSE    
##  5 2016-01-05 FALSE    
##  6 2016-01-06 FALSE    
##  7 2016-01-07 FALSE    
##  8 2016-01-08 FALSE    
##  9 2016-01-09 FALSE    
## 10 2016-01-10 FALSE    
## # ... with 1,086 more rows

ymd(format(odate, "2000-%m-%d"))会将所有日期放入 2000 年(这是一个任意选择)。


推荐阅读