【发布时间】: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 可能会有所帮助。