问题 在另一个字符串向量中查找字符串向量的匹配项


我正在尝试创建一个新闻文章数据框的子集,其中至少提到一组关键字或短语的一个元素。

# Sample data frame of articles
articles <- data.frame(id=c(1, 2, 3, 4), text=c("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod", "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,", "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo", "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse"))
articles$text <- as.character(articles$text)

# Sample vector of keywords or phrases
keywords <- as.character(c("elit", "tempor incididunt", "reprehenderit"))

#   id                                                                         text
# 1  1     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
# 2  2 tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
# 3  3      quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
# 4  4    consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse

给定关键字的向量,子集应包含行1,2和4,因为这些行包含向量的一个或多个元素。

也不 %in 也不 grepl() 工作,因为 %in%  似乎要求数据框中的每个字都被矢量化(articles$text %in% keywords 四个结果 FALSEs),和 grep() 似乎无法处理矢量化模式(grep(keywords, articles$text) 给出错误)。单独的功能似乎都不能在多个维度上很好地工作(即,在所有行中搜索一个单词很容易,但不能同时搜索所有3个单词)。

查找和选择包含关键字向量的至少一个元素的数据框的所有行的最佳方法是什么?


3263
2018-06-16 04:12


起源



答案:


您可以尝试粘贴“关键字”并将它们与管道字符分开(|)它将像“或”一样工作,如下所示:

> articles[grepl(paste(keywords, collapse="|"), articles$text),]
  id                                                                         text
1  1     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
2  2 tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
4  4    consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse

16
2018-06-16 04:17



如果关键字包含需要转义的字符,该怎么办?是否必须手动转义所有关键字中的所有特殊字符? - Chill2Macht


答案:


您可以尝试粘贴“关键字”并将它们与管道字符分开(|)它将像“或”一样工作,如下所示:

> articles[grepl(paste(keywords, collapse="|"), articles$text),]
  id                                                                         text
1  1     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
2  2 tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
4  4    consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse

16
2018-06-16 04:17



如果关键字包含需要转义的字符,该怎么办?是否必须手动转义所有关键字中的所有特殊字符? - Chill2Macht