首页 > 解决方案 > 匹配功能无法找到现有匹配

问题描述

我有一个日期向量(包括时间),并且正在尝试使用该match函数(实际上%in%)来查看向量中是否包含另一个日期。即使我知道要搜索的日期在向量中,%in%也找不到它。例如,考虑以下冗长的日期时间向量,以及我要搜索的日期。

BEGIN <- strptime(paste("7/10/2018","05:22"),format="%m/%d/%Y %H:%M")
END <- strptime(paste("9/3/2018","23:59:59"),format="%m/%d/%Y %H:%M:%S")
SEQ <- as.POSIXlt(seq(BEGIN,END,3600))
DATE <- strptime("8/16/2018 14:22:00","%m/%d/%Y %H:%M:%S")

我绝对知道它DATE在 vectorSEQ中,但match找不到它。

DATE==SEQ[898]
DATE %in% SEQ
match(DATE,SEQ)

当我搜索 的特定子集时SEQ,它会成功,但会在另一个几乎相同的子集上失败。

DATE %in% SEQ[888:900]
DATE %in% SEQ[888:length(SEQ)]
DATE %in% SEQ[887:900]
DATE %in% SEQ[887:length(SEQ)]

SEQ2 <- SEQ[888:900]
DATE %in% SEQ2
SEQ2 <- SEQ[887:900]
DATE %in% SEQ2

关于第 887 个值没有什么特别的(我可以说),但包括第 888 个值之前的任何内容都会导致match失败。我可以通过使用来解决这个问题which,比如

ifelse(length(which(SEQ==DATE)>0),TRUE,FALSE)

但我真的很困惑为什么match找不到明显存在的匹配项。

谁能阐明正在发生的事情以及我的示例是否有一些奇怪的地方?

谢谢。

标签: rmatch

解决方案


这个对我有用。这是在 Windows 10,R 版本 3.5.3 (2019-03-11) - “伟大的真相”,64 位。

BEGIN <- strptime(paste("7/10/2018","05:22"),format="%m/%d/%Y %H:%M")
END <- strptime(paste("9/3/2018","23:59:59"),format="%m/%d/%Y %H:%M:%S")
SEQ <- as.POSIXlt(seq(BEGIN,END,3600))
DATE <- strptime("8/16/2018 14:22:00","%m/%d/%Y %H:%M:%S")

DATE %in% SEQ
#> [1] TRUE

reprex 包(v0.2.1)于 2019 年 5 月 6 日创建


推荐阅读