我想使用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的输出。
答案 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