r - 在 grep 中查找模式向量的匹配索引
问题描述
使用 时是否有一种简单的方法可以找到相应的向量索引grep
?
v=c(123,456,789,651)
pat=c(1,35,47,8)
id=grep(paste0(pat, collapse="|"), v)
v[id]
[1] 123 789 651
我想生成:
pat_id
[1] 1 4 1
所以这pat[pat_id]
会给我pat
匹配的值。
pat[pat_id]
[1] 1 8 1
match()
在这种情况下不能使用,因为字符串必须相同才能算作匹配。
解决方案
我们可以循环v
使用,str_detect
因为它被向量化以查找模式是否存在于其中任何一个中并直接返回索引或向量。
library(stringr)
unlist(sapply(v, function(x) which(str_detect(x, as.character(pat)))))
#[1] 1 4 1
如果最终目标是获取pat
向量,我们可以直接做
unlist(sapply(v, function(x) pat[str_detect(x, as.character(pat))]))
#[1] 1 8 1
推荐阅读
- android - Android 设备型号变体是否具有完全相同的硬件?
- java - 将数组元素与方法的返回值进行比较
- ios - 使用 azure api 管理为本机应用程序实现 SSL 固定的最佳方法
- android - 如何捕获应用程序上的所有用户交互
- python - Python:计算列表中的频率并对齐结果
- authentication - 在 Asp.Net Core2.2 中从 CAS 接收 INVALID_TICKET
- c++ - 为什么我的代码应该说“否”时却说“是”?
- c - 使用 MPI_Isend 发送和接收不同类型的数据
- amazon-web-services - 如何找到我正在收费的 aws 实例?
- angular - 使用角度播放另一个视频时暂停播放 youtube 视频