2013-06-16 37 views
8

Tôi đang cố gắng tạo một tập con của một khung dữ liệu của các bài viết tin tức đề cập đến ít nhất một phần tử của một tập hợp các từ khóa hoặc cụm từ.Tìm các kết quả phù hợp của vec tơ chuỗi trong một vectơ khác của chuỗi

# 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 

Cho vectơ từ khóa, tập hợp con phải chứa hàng 1, 2 và 4, vì các hàng đó chứa một hoặc nhiều phần tử của véc tơ.

Cả %in cũng không grepl() làm việc, kể từ %in% dường như đòi hỏi cho mỗi từ trong khung dữ liệu được vector hóa (articles$text %in% keywords kết quả trong bốn FALSE s), và grep() dường như không có khả năng xử lý mẫu vectorized (grep(keywords, articles$text) đưa ra một lỗi). Không phải chức năng nào cũng có vẻ hoạt động tốt trên nhiều thứ nguyên (nghĩa là sẽ dễ dàng tìm kiếm một từ trong tất cả các hàng, nhưng không phải tất cả 3 từ cùng một lúc).

Cách tốt nhất để tìm và chọn tất cả các hàng của khung dữ liệu có chứa ít nhất một trong các thành phần của vector từ khóa là gì?

Trả lời

13

Bạn có thể thử dán "từ khóa" của bạn lại với nhau và tách chúng bằng các ký tự gạch (|) mà sẽ làm việc như một "hoặc", như thế này:

> 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

Phải làm gì nếu các từ khóa có ký tự cần phải được trốn thoát trong họ? Người ta có phải tự thoát khỏi tất cả các ký tự đặc biệt trong tất cả các từ khóa không? – Chill2Macht

Các vấn đề liên quan