r - 匹配功能无法找到现有匹配
问题描述
我有一个日期向量(包括时间),并且正在尝试使用该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
找不到明显存在的匹配项。
谁能阐明正在发生的事情以及我的示例是否有一些奇怪的地方?
谢谢。
解决方案
这个对我有用。这是在 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 日创建
推荐阅读
- python - Pandas Covid-数据作业
- makefile - 尝试使用 erlang.mk 编译 erlang 程序
- laravel - Laravel 队列再次调用自己,现在它们是两个竞争队列
- amazon-ec2 - AAPanel - ARM EC2 上的 PHP 8.0.11 安装失败
- python - 如何写入谷歌表格,我的 groupby 中的 city_name 列会导致 Python?
- odoo - 如何从 python 代码显示向导调用?
- flutter - 如何使用 Amplify 将 Cubit 更改为 Bloc - Flutter
- amazon-web-services - 如何将域指向路径或路由?AWS Elastic BeanStalk 和 Route 53
- javascript - 给新手的 Javascript 闭包解释
- c# - itextsharp 5.5.13.2 显示匈牙利语和波兰语的问题