使用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()
在这种情况下不能使用,因为字符串必须相同才能算作匹配项。
答案 0 :(得分:1)
我们可以遍历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