2013-06-16 6 views
8

Я пытаюсь создать подмножество кадра данных из статей новостей, в которых упоминается хотя бы один элемент набора ключевых слов или фраз.Найти совпадения вектора строк в другом векторе строк

# 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 результатов в четыре FALSE с), и grep(), кажется, не быть в состоянии обрабатывать векторизованные шаблоны (grep(keywords, articles$text) дает оценку ошибка). По-видимому, ни одна из функций не работает хорошо в разных измерениях (т. Е. Легко будет искать одно слово во всех строках, но не все 3 одновременно).

Каков наилучший способ поиска и выбора всех строк фрейма данных, содержащих хотя бы один из элементов вектора ключевого слова?

ответ

13

Вы можете попробовать вставить свои «ключевые слова» вместе и разделить их с характером трубы (|), который будет работать как «или», как это:

> 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 
+0

Что делать, если ключевые слова имеют символы, нужно бежать в них? Нужно ли вручную удалять все специальные символы во всех ключевых словах? – Chill2Macht