在 POSIXct 对象上使用 which() 获取错误的元素
Using which() on POSIXct object grabs wrong elements
我有一个数据框 e,它有一个日期列。在原始文件中,日期被保存为因素。所以我将它们转换为字符串。在这些字符串中,它们的格式为 Day/Month/Year Hour:Minute,例如2014 年 5 月 27 日 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")
命令 returns 以“2016-02-12 08:54:00 UTC”开头的日期列表,尽管在我的起点之后但在“2016-02”之前有几十个日期-12 08:54:00 UTC”,它不包括。好像提前了8、9个小时
我知道我在时区方面做错了。我在 上看到了答案,它似乎非常接近我的问题。但是,我确实在我原来的 strptime 命令中指定了时区(我也尝试使用 as.POSIXct 而不是 strptime 并且遇到了同样的问题)。
谁能看出我做错了什么???
您可能应该将其保留为 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
我有一个数据框 e,它有一个日期列。在原始文件中,日期被保存为因素。所以我将它们转换为字符串。在这些字符串中,它们的格式为 Day/Month/Year Hour:Minute,例如2014 年 5 月 27 日 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")
命令 returns 以“2016-02-12 08:54:00 UTC”开头的日期列表,尽管在我的起点之后但在“2016-02”之前有几十个日期-12 08:54:00 UTC”,它不包括。好像提前了8、9个小时
我知道我在时区方面做错了。我在
谁能看出我做错了什么???
您可能应该将其保留为 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