如何测试向量中的每个值是否与字符串向量中的任何值匹配?

时间:2018-06-29 22:24:58

标签: r stringr

我想使用str_detect测试fruit中的每个值,向量strings中是否有匹配项。

fruit <- c("apple", "banana", "pear", "pinapple")
  strings <- c("apple", "app", "pear", "apple", "app", "pear", "apple", "app", "pear")

这可以完成工作:

> map_chr(fruit, ~any(str_detect(.x, strings)))
[1] "TRUE"  "FALSE" "TRUE"  "TRUE" 

但是我想知道是否有一种方法可以使用str_detect的矢量化以更简洁的形式编写它。像这样:

  str_detect(fruit, strings)  

[1]  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE
Warning message:
In stri_detect_regex(string, pattern, opts_regex = opts(pattern)) :
  longer object length is not a multiple of shorter object length

但是我正在寻找长度为length(fruit)而不是9的输出。

2 个答案:

答案 0 :(得分:2)

您有很多选择可以实现正确的解决方案。

选项#1::使用%in%运算符

fruit %in% strings

#[1]  TRUE FALSE  TRUE FALSE

选项#2:使用str_detect

library(stringr)

# Make sure to use \b around each word to avoid partial matching.
str_detect(fruit, pattern = paste("\\b",strings,"\\b", sep="", collapse = "|"))
#[1]  TRUE FALSE  TRUE FALSE

答案 1 :(得分:1)

香蕉和菠萝应该给你假,因为它们不在字符串中:

str_detect(fruit,str_c("\\b(",strings,")\\b",collapse = "|"))

[1]  TRUE FALSE  TRUE FALSE