在POSIXct对象上使用which()可以获取错误的元素

问题描述 投票:1回答:1

我有一个数据框,e,有一个Date列。在原始文件中,日期将保存为因子。所以我将它们转换为字符串。在这些字符串中,它们的格式为日/月/年小时:分钟,例如, 27/05/2014 15:42然后我使用strptime将这些字符串转换为POSIXct对象。

e$Date = as.character(e$Date)
e$Date = strptime(e$Date, tz = "UTC",  format = "%d/%m/%Y %H:%M")

在输出中看起来都很好,因为日期现在的格式为“2014-05-27 15:42:00 UTC”。然而。当我使用which()查找“2016-02-14 00:51:00 UTC”之后的日期时,我收到了错误的日期!

 which(e$Date>"2016-02-14 00:51:00 UTC")

该命令返回以“2016-02-12 08:54:00 UTC”开头的日期列表,即使在我的起点后有几十个日期,但在“2016-02-12 08:54:00 UTC”之前它不包括。它似乎向前移动了8或9个小时。

我知道我在时区做错了。我在Subset dataframe based on POSIXct date and time greater than datetime using dplyr上看到了答案,这似乎与我的问题非常接近。但是,我确实在我的原始strptime命令中指定了时区(我也尝试使用as.POSIXct而不是strptime并且具有相同的问题)。 任何人都可以看到我做错了什么???

r date datetime posix posixct
1个回答
1
投票

您应该将其保留为POSIXlt日期时间(strptime创建),然后在适当的时区与另一个日期时间对象进行比较。例如。:

x <- strptime(c("2018-08-30 08:04", "2018-08-30 08:05", "2018-08-30 08:06", 
"2018-08-30 08:07", "2018-08-30 08:08"), format="%Y-%m-%d %H:%M", tz="UTC")
#[1] "2018-08-30 08:04:00 UTC" "2018-08-30 08:05:00 UTC"
#[3] "2018-08-30 08:06:00 UTC" "2018-08-30 08:07:00 UTC"
#[5] "2018-08-30 08:08:00 UTC"

文本比较给出奇怪的结果:

x > "2018-08-30 08:06:00 UTC"
#TRUE TRUE TRUE TRUE TRUE

日期时间比较:

x > as.POSIXlt("2018-08-30 08:06:00", tz="UTC")
#[1] FALSE FALSE FALSE  TRUE  TRUE
© www.soinside.com 2019 - 2024. All rights reserved.