R POSIXct 日期相等未按预期工作

问题描述 投票:0回答:2

当我使用 POSIXct 库比较 R 中看似相同的日期时,当 R 看起来应该返回 TRUE 时,它仍然返回 FALSE。有什么看起来不对劲的地方吗?这是我的代码和输出。当我将日期写入文本文件并读回并将它们转换为 POSIXct 日期时,R 返回 FALSE 并且它们不是相同的日期。

#dataframe from previous source
data
write.table(data,"latest.txt",sep=",",col.names=TRUE,row.names=FALSE)

prev = read.delim("latest.txt",sep=",")
prev$date <- as.POSIXct(strptime(prev$date, format = "%Y-%m-%d %H:%M:%S", tz = "Etc/GMT-8"))

prev$date
data$date

class(prev$date)
class(data$date)

prev$date == data$date

此片段的输出

                 date  V1 
1 2021-09-16 22:05:32 100
[1] "2021-09-16 22:05:32 +08"
[1] "2021-09-16 22:05:32 +08"
[1] "POSIXct" "POSIXt" 
[1] "POSIXct" "POSIXt" 
[1] FALSE

这是我遇到问题的一些输入数据

structure(list(date = structure(1631804267.5, tzone = "Etc/GMT-8", class = c("POSIXct", 
"POSIXt")), CO_RAMP = 258.183833333333, NO_RAMP = 9.85633333333333, 
    NO2_RAMP = 16.3028333333333, O3_RAMP = 15.3968333333333, 
    CO2_RAMP = 242.283333333333, T_RAMP = 13.6633333333333, RH_RAMP = 65.675, 
    PM1_RAMP = 2.20083333333333, PM_RAMP = 2.90366666666667, 
    PM10_RAMP = 2.98666666666667), class = "data.frame", row.names = c(NA, 
-1L))
r
2个回答
0
投票

问题可以用 -

重现
data <- data.frame(date = Sys.time())
write.table(data,"latest.txt",sep=",",col.names=TRUE,row.names=FALSE)
prev = read.delim("latest.txt",sep=",")
prev$date <- as.POSIXct(prev$date)

prev$date
#[1] "2021-09-17 14:08:48 +08"
data$date
#[1] "2021-09-17 14:08:48 +08"
class(prev$date)
#[1] "POSIXct" "POSIXt" 
class(data$date)
#[1] "POSIXct" "POSIXt" 
prev$date == data$date
#[1] FALSE

如果你删除属性并比较两个角色的时间,它会起作用。

as.character(prev$date) == as.character(data$date)
#[1] TRUE

但是,我认为这是一个时区问题。如果您将时区保留为 UTC,它将按预期工作。

data <- data.frame(date = as.POSIXct(as.character(Sys.time()), tz = 'UTC'))
write.table(data,"latest.txt",sep=",",col.names=TRUE,row.names=FALSE)
prev = read.delim("latest.txt",sep=",")
prev$date <- as.POSIXct(prev$date, tz = 'UTC')
prev$date == data$date
#[1] TRUE

0
投票

我遇到了同样的问题 - 两个对象看起来相同(值),但将它们与

==
identical()
进行比较将返回
FALSE

要直观地了解原因,请使用

attributes()
函数。 就我而言,它们具有不同的属性

© www.soinside.com 2019 - 2024. All rights reserved.