使用R中的日期序列

时间:2017-07-31 10:17:52

标签: r

我有一个data.frame,其中一列日期在POSIXct。我要做的是创建一个新的logical列,显示日期是否在某个范围内。例如,如果我有这个向量:"2016-10-16 GMT" "2016-04-30 GMT" "2016-08-04 GMT" "2016-11-07 GMT" "2016-09-06 GMT" "2016-01-11 GMT"并且有一个范围

date_from <- "2016-10-10"
date_to <- "2016-11-20"

新列应该是

TRUE, FALSE, FALSE, TRUE, FALSE, FALSE

我如何实现这种行为?真正的数据集长达数万行,对我来说唯一简单的方法就是循环遍历所有行,这不是我认为这样做的好方法。

2 个答案:

答案 0 :(得分:2)

只有基础R你可以这样做:

as.Date(x) %in% as.Date(date_from):as.Date(date_to)
# [1]  TRUE FALSE FALSE  TRUE FALSE FALSE

数据

x <- c("2016-10-16 GMT","2016-04-30 GMT","2016-08-04 GMT","2016-11-07 GMT","2016-09-06 GMT","2016-01-11 GMT") 
date_from <- "2016-10-10"
date_to <- "2016-11-20"

答案 1 :(得分:1)

使用data.table,因此您无需使用&lt;&gt;和lubridate可以轻松转换日期。

library(data.table)
library(lubridate)

f <- c("2016-10-16 GMT", 
"2016-04-30 GMT", 
"2016-08-04 GMT", 
"2016-11-07 GMT", 
"2016-09-06 GMT", 
"2016-01-11 GMT")

f <- ymd(f)

date_from <- ymd("2016-10-10")
date_to <- ymd("2016-11-20")

f %between% c(date_from, date_to) # From data.table
f %within% interval(date_from, date_to) # From lubridate