2013-06-16 12 views
8

Sto provando a creare un sottoinsieme di un frame di dati di articoli di notizie che menzionano almeno un elemento di un insieme di parole chiave o frasi.Trova corrispondenze di un vettore di stringhe in un altro vettore di stringhe

# 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 

Dato il vettore di parole chiave, il sottoinsieme dovrebbe contenere righe 1, 2 e 4, dal momento che tali righe contengono uno o più degli elementi del vettore.

%ingrepl() lavoro, poiché %in% sembra richiedere che ciascuna parola nel frame di dati vettorializzare (articles$text %in% keywords risultati in quattro FALSE s), e grep() non sembra essere in grado di gestire modelli vettorializzate (grep(keywords, articles$text) dà un errore). Nessuna delle due funzioni sembra funzionare bene su più dimensioni (vale a dire sarebbe facile cercare una parola in tutte le righe, ma non tutte e 3 nello stesso momento).

Qual è il modo migliore per trovare e selezionare tutte le righe del frame di dati che contengono almeno uno degli elementi del vettore di parole chiave?

risposta

13

Si può provare a incollare il vostro "parole chiave" insieme e separarli con il carattere pipe (|) che funzionerà come un "o", in questo modo:

> 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

Cosa fare se le parole chiave hanno caratteri che bisogno di essere sfuggiti in loro? Si deve sfuggire manualmente tutti i caratteri speciali in tutte le parole chiave? – Chill2Macht

Problemi correlati