我有一个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
我如何实现这种行为?真正的数据集长达数万行,对我来说唯一简单的方法就是循环遍历所有行,这不是我认为这样做的好方法。
答案 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