我正在开展一个项目,我希望在另一个事件发生后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)
不幸的是,这只是返回原始数据,而不进行任何过滤。
有人可以帮忙吗?
答案 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")))