我不确定选择日期时间作为 POSIXct 格式时出了什么问题。我已经阅读了关于基于 as.Date 对数据框进行子集划分的几篇评论,并且我可以毫不费力地让它正常工作。我也阅读了很多帖子,建议过滤 POSIXct 格式应该可以工作,但由于某种原因,我无法让它正常工作。
一个示例数据框:
library(lubridate)
library(dplyr)
date_test <- seq(ymd_hms('2016-07-01 00:00:00'),ymd_hms('2016-08-01 00:00:00'), by = '15 min')
date_test <- data.frame(date_test)
date_test$datetime <- date_test$date_test
date_test <- select(date_test, -date_test)
我检查了数据格式,确认它是POSIXct格式,并尝试了几种方法来对数据进行子集筛选,使结果大于2016-07-01 01:15:00。然而,输出的结果总是没有将小于2016-07-01 01:15:00的日期时间删除。如果有相关问题并且我没有发现,我很抱歉,但我已经尽力寻找并尝试解决此问题。我使用UTC作为时区以避免夏令时问题,所以这不是问题的原因——除非子集筛选需要这样做。
class(date_test$datetime)
date_test <- date_test %>% filter(datetime > '2016-07-01 01:15:00')
date_test <- date_test %>%
filter(datetime > as.POSIXct("2016-07-01 00:15"))
date_test <- subset(date_test, datetime > as.POSIXct('2016-07-01 01:15:00'))
现在,如果我使用以下筛选条件:
date_test <- date_test %>%
filter(datetime > as.POSIXct("2016-07-10 01:15:00"))
输出结果非常奇怪,时间晚了一天并且不正确?
2016-07-09 13:30:00
2016-07-09 13:45:00
2016-07-09 14:00:00
2016-07-09 14:15:00
2016-07-09 14:30:00
如果有帮助的话,我正在使用 MAC OS Sierra 操作系统和 R Studio 版本 1.0.143,R You Stupid Darkness,DPLYR 版本 0.5 和 Lubridate 版本 1.6。
ymd_hms
默认使用“UTC”时区的as.POSIXct
时间 -as.POSIXct
使用系统时区(例如-对于我来说是澳大利亚,对于您来说是伊利诺伊州)- 您需要始终使用ymd_hms
或根据Dave的建议更改为“UTC”时区。 - thelatemaildate_test <- date_test %>% filter(datetime > as.POSIXct('2016-07-01 01:15:00', tz="UTC"))
和test <- date_test[date_test$datetime > as.POSIXct("2016-07-01 01:15:00", tz="UTC"),] test <- as.data.frame(test)
- Bill Perry