如何使用POSIXct类型选择日期范围

时间:2014-05-03 21:43:25

标签: r date lubridate

我正在开展一个项目,我希望在另一个事件发生后9个月跟踪出生总数(想知道是否存在相关性)。有人建议我使用“lubridate”软件包将MONTH和YEAR组合在我的数据框架中(我正在寻求这样做)。

我在两个数据框中都成功使用了lubridate。问题是我只想从其中一个数据框中选择某个日期范围,而我很难做到这一点。我认为这是因为数据类型是POSIXct:

str(model.weather)
'data.frame':   467 obs. of  2 variables:
 $ DATE      : POSIXct, format: "2006-01-01" "2006-01-01" "2006-01-01" "2006-01-01" ...
 $ EVENT_TYPE: Factor w/ 8 levels "Hail","Heavy Snow",..: 2 2 2 2 2 2 3 2 3 3 ...

我已经尝试过转换为数字,但不幸的是,这对我的DATE变量中的数据做了可怕的,可怕的事情。我也试过转换为因子,字符和整数 - 它们似乎都不起作用。

我正在尝试使用“子集”功能来选择必要的日期范围:

model.weather <- subset(model.weather, DATE >= 2006-04-01 | DATE <= 2011-03-01)

不幸的是,这只是返回原始数据,而不进行任何过滤。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:5)

如果DATE仅包含日期(没有小时等,就像上面的示例数据中一样),您可以将其转换为as.Date类,然后对其进行操作

model.weather$DATE <- as.Date(model.weather$DATE)

model.weather <- subset(model.weather, DATE >= "2006-04-01" & DATE <= "2011-03-01")

或(更好的解决方案)

model.weather <- model.weather[model.weather$DATE >= "2006-04-01" & model.weather$DATE <= "2011-03-01", ]

答案 1 :(得分:0)

如果您想使用dplyr,可以尝试类似的操作。

model.weather2 <- model.weather %>%
    filter(as.Date(DATE) <= "2006-04-01" & as.Date(DATE) >= "2011-03-01")

model.weather2 <- model.weather %>%
    filter(between(as.Date(DATE), as.Date("2006-04-01"), as.Date("2011-03-01")))