grepl在两个向量上

时间:2019-05-19 05:14:40

标签: r grepl

我想在两个向量上应用grepl,以查看第一向量的元素在第二向量的相应元素中是否可用。例如

grepl(c("bc","23","a2"),c("abcd","1234","zzzz"))

并且由于bcabcd中,231234中,而a2不在zzzz中,所以我想得到TRUE TRUE FALSE。但是,相反,这就是我得到的:

[1]  TRUE FALSE FALSE
Warning message:
In grepl(c("bc", "23", "a2"), c("abcd", "1234", "zzzz")) :
argument 'pattern' has length > 1 and only the first element will be used 

4 个答案:

答案 0 :(得分:5)

我们可以在此处尝试使用mapply

fun <- function(x, y) {
    grepl(x, y)
}

mapply(fun, c("bc","23","a2"), c("abcd","1234","zzzz"))

  bc    23    a2 
TRUE  TRUE FALSE 

答案 1 :(得分:4)

stringr软件包(依赖于stringi)提供了自然矢量化的regex函数:

require(stringr)
str_detect(string=c("abcd","1234","zzzz"),pattern=c("bc","23","a2"))
#[1]  TRUE  TRUE FALSE

请注意,自变量grep的顺序是不同的。

答案 2 :(得分:1)

我们也可以使用purrr

purrr::map2(c("bc","23","a2"),c("abcd","1234","zzzz"),
            function(x,y) grepl(x,y))
[[1]]
[1] TRUE

[[2]]
[1] TRUE

[[3]]
[1] FALSE

如果您想呆在base上:

   unlist(Map(function(x,y) grepl(x,y), my_list[[1]],my_list[[2]]))
   bc    23    a2 
 TRUE  TRUE FALSE 

答案 3 :(得分:0)

尝试or运算符

grepl(c("bc|23|a2"),c("abcd","1234","zzzz"))