我在这里找到了同样的问题的答案: R - 查找包含所有字符串/模式的向量元素 - str_detect grep。但建议的解决方案执行时间过长。
我有73,360个带有句子的观测值。我想要一个TRUE返回匹配,包含所有搜索字符串。
sentences <- c("blue green red",
"blue green yellow",
"green red yellow ")
search_terms <- c("blue","red")
pattern <- paste0("(?=.*", search_terms,")", collapse="")
grepl(pattern, sentences, perl = TRUE)
-output
[1] TRUE FALSE FALSE
这样可以得到正确的结果,但是耗时非常非常长。有更快的方法吗? 我尝试了
str_detect
,但得到相同的延迟结果。顺便说一下,“句子”包含特殊字符,例如
[],.-
,但没有像ñ
这样的特殊字符。更新:以下是使用建议方法的基准测试结果,感谢 @onyambu 的输入。
Unit: milliseconds
expr min lq mean median uq max neval
OP_solution() 7033.7550 7152.0689 7277.8248 7251.8419 7391.8664 7690.964 100
map_str_detect() 2239.8715 2292.1271 2357.7432 2348.9975 2397.1758 2774.349 100
unlist_lapply_fixed() 308.1492 331.9948 345.6262 339.9935 348.9907 586.169 100
Reduce_lapply胜利了!感谢@onyambu
Unit: milliseconds
expr min lq mean median uq max neval
Reduce_lapply() 49.02941 53.61291 55.96418 55.31494 56.76109 80.64735 100
unlist_lapply_fixed() 318.25518 335.58883 362.03831 346.71509 357.97142 566.95738 100