r - 如何检查日期是否在一年中的指定时间内
问题描述
假设我有一个三年的时间序列,如下所示:
library(lubridate)
ts1 <- seq(ymd('2016-01-01'), ymd('2018-12-31'), '1 day')
现在我想指定一年中的某个时间,例如北半球的天文夏季,从 6 月 21 日开始,到 9 月 23 日结束,并检查我的ts1
向量的哪些元素属于这个范围。我怎么能做到这一点,充其量是 lubridate,但不是必须的?
解决方案
我会创建一个新的日期变量,将所有日期放在同一年,然后检查:
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 年(这是一个任意选择)。
推荐阅读
- python - 尽管屏蔽了对 keras 中零填充小批量 LSTM 训练的支持,但预测为零
- java - 如何修复 HTML 片段中悬挂的 html 标签?
- java - 使用正则表达式拆分字母数字字符串不起作用
- r - 根据另一列条件替换一个列向量
- ecmascript-6 - ESLINT:params.majorVersion = m[1]; => 使用数组解构。(首选解构)
- javascript - 用于实时验证电话号码的正则表达式,包括 x
- python - 如何根据数据自动更改图表标题
- java - 如何在使用 java opencsv 阅读时跳过 csv 标头中的附加 (,) 逗号
- php - 文件上传到目录不起作用,没有文件
- swift - eureka formviewcontroller中的引脚部分标题