【问题标题】:In R, why does %in% return FALSE although date time element is contained in the vector?在 R 中,尽管日期时间元素包含在向量中,为什么 %in% 返回 FALSE?
【发布时间】:2017-11-08 17:11:09
【问题描述】:

如果我检查日期时间元素是否包含在带有%in% 的向量中,我很难理解为什么 R 返回 FALSE,尽管我检查的日期时间元素肯定包含在向量中。换句话说,我想知道这些输出是如何实现的:

> GOLD.5.event.times[1] == GOLD.5$`1.Date & Time`[24544]
[1] TRUE
> GOLD.5.event.times[1] %in% GOLD.5$`1.Date & Time`
[1] FALSE

我希望 TRUE%in% 操作返回,因为相应的日期时间值包含在向量中。

我使用的数据类型的快速概览:

> GOLD.5.event.times <- seq(ISOdatetime(2017, 4, 4, 0, 0, 0, tz = ""),
ISOdatetime(2017, 4, 5, 0, 0, 0, tz = ""), "5 min")
> GOLD.5.event.times[1:10]
[1] "2017-04-04 00:00:00 CEST" "2017-04-04 00:05:00 CEST" "2017-04-04  
00:10:00 CEST" "2017-04-04 00:15:00 CEST" "2017-04-04 00:20:00 CEST"
[6] "2017-04-04 00:25:00 CEST" "2017-04-04 00:30:00 CEST" "2017-04-04
00:35:00 CEST" "2017-04-04 00:40:00 CEST" "2017-04-04 00:45:00 CEST"

> GOLD.5$`1.Date & Time`[24540:24550] # result of strptime() conversion
[1] "2017-04-03 22:55:00 CEST" "2017-04-03 23:00:00 CEST" "2017-04-03
23:45:00 CEST" "2017-04-03 23:55:00 CEST" "2017-04-04 00:00:00 CEST"
[6] "2017-04-04 00:05:00 CEST" "2017-04-04 00:10:00 CEST" "2017-04-04
00:15:00 CEST" "2017-04-04 00:20:00 CEST" "2017-04-04 00:25:00 CEST"
[11] "2017-04-04 00:30:00 CEST"

还有dputs。

> dput(GOLD.5$`1.Date & Time`[24544])
structure(list(sec = 0, min = 0L, hour = 0L, mday = 4L, mon = 3L, 
year = 117L, wday = 2L, yday = 93L, isdst = 1L, zone = "CEST", 
gmtoff = NA_integer_), .Names = c("sec", "min", "hour", "mday", 
"mon", "year", "wday", "yday", "isdst", "zone", "gmtoff"), class =
c("POSIXlt", "POSIXt"))
> dput(GOLD.5.event.times[1])
structure(1491256800, class = c("POSIXct", "POSIXt"), tzone = "")

【问题讨论】:

  • 添加 dput 的数据
  • 请提供可重现的示例,包括示例数据、您尝试过的代码和预期结果。
  • 感谢您提供 dputs。在每个上使用str() 表明您的第一个数据帧没有附加时间元素,因此不可能匹配。
  • 我在这些和%in% 上得到的== 是错误的,因为它们不一样。一个有时间和时区,另一个没有,一个是POSIXlt,另一个是POSIXct。
  • 感谢您的所有 cmets。 @HongOoi 和 Chris,你让我处于正确的领先地位。不同的班级是问题所在。我将 strptime() 转换更改为 as.POSIXct() 并且效果也很好。对于遇到类似问题的其他人,link 可能会有所帮助。

标签: r datetime matching


【解决方案1】:

在 cmets 中求解。

不同类别的日期时间元素导致了该问题。 查看this 了解日期时间转换函数的概述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2019-06-08
    • 2021-07-31
    相关资源
    最近更新 更多