【发布时间】:2013-06-12 09:07:46
【问题描述】:
我正在尝试创建一个新闻文章数据框的子集,其中至少提到一组关键字或短语中的一个元素。
# 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 个单词)。
查找和选择数据框中至少包含一个关键字向量元素的所有行的最佳方法是什么?
【问题讨论】:
标签: r string-matching