在 R 中使用带有 ">" 和"<"的 POSIXct 的问题



尝试根据某个 POSIXct 日期和时间之前或之后的日期对数据进行子集化时,我得到的结果不一致。当我制作这样的一串日期时:

 myDates <- c(as.POSIXct("2014-12-27 08:10:00 UTC"), 
         as.POSIXct("2014-12-27 08:15:00 UTC"),
         as.POSIXct("2014-12-27 09:30:00 UTC"))

然后尝试子集以查找 2014 年 12 月 27 日上午 8:15 之前myDates中的所有条目,如下所示:

 myDates[myDates < as.POSIXct("2014-12-27 08:15:00")]

工作正常,我得到

 "2014-12-27 08:10:00 PST"

(虽然我不明白为什么它说时区为"PST";这就是我所在的地方,但我将其设置为 UTC)。

但是,我的原始日期和时间数据在Excel中,它们是数字格式。我将它们导入为名为 Samples 的数据帧,并通过执行以下操作将日期和时间列转换为 POSIXct 格式:

 as.POSIXct(Samples$DateTime, origin = "1970-01-01", tz = "UTC")

现在,我对这些日期的子设置感到沮丧,直面办公桌。特别拿一个日期,x <- Samples$DateTime[34],根据 R 给我的输出,它是"2014-12-27 08:10:00 UTC".如果我检查 x 是否<2014-12-27 08:15,那应该是真的,这是我看到的:

 x < as.POSIXct("2014-12-27 08:15:00 UTC")
 TRUE

但是 x 不应该更少 2014-12-27 8:09:00 UTC,对吧?这是我看到的:

 X < as.POSIXct("2014-12-27 08:09:00 UTC")
 TRUE

为什么,为了皮特的爱,R告诉我8:10在8:09之前?!?对于我像上面这样输入的数据来说,这似乎不是问题,仅适用于我从 Excel 导入的数据。

您可能需要先在同一时区获取所有内容。尝试

as.numeric(as.POSIXct("2014-12-27 08:10:00 UTC", tz="UTC"))
#[1] 1419667800
# equivalent to "2014-12-27 08:10:00 UTC"

与。

as.numeric(as.POSIXct("2014-12-27 08:10:00 UTC"))
#[1] 1419631800
# equivalent to 8:10 in local timezone - in my case Aust. EST.
# "2014-12-27 08:10:00 AEST"

您可以看到它们实际上在数字上是不同的。

若要解决此问题,请在导入时显式指定tz=,因为在输入时不会检测到文本字符串中的"UTC"

另外,要非常小心变量名称。可能您只是在这里输入了它,但是在问题的描述和您使用的第一个逻辑比较中x,在第二个逻辑比较中,您使用了X.

R 区分大小写,因此它不会将您的日期与存储在 x 中的日期进行比较。如果内存中存储了其他任何东西X实际上可能是您提出的问题得到了正确的答案。

相关内容

  • 没有找到相关文章

最新更新