首页 > 解决方案 > 在 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()在这种情况下不能使用,因为字符串必须相同才能算作匹配。

标签: r

解决方案


我们可以循环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

推荐阅读