2013-06-16 7 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를 포함한다. grep(keywords, articles$text)가 있습니다 (%in% 이후

어느 %ingrepl() 작업, 데이터 프레임의 각 단어는 (사 FALSE들에 articles$text %in% keywords 결과를) 벡터화 할 것을 요구하는 것, 그리고 grep()는 벡터화 패턴을 처리 할 수있을 것 같지 않습니다 오류). 하나의 기능 만 여러 차원에서 잘 작동하는 것처럼 보이지 않습니다 (즉, 모든 행에서 한 단어를 검색하는 것이 쉬울 것이지만 동시에 모든 세 단어를 검색하는 것은 쉽지 않음).

키워드 벡터의 요소 중 적어도 하나를 포함하는 데이터 프레임의 모든 행을 찾아서 선택하는 가장 좋은 방법은 무엇입니까?

답변

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