2016-06-10 4 views
1

Ich habe eine Reihe von Wörtern, die ich von meiner Analyse ausschließen möchte. Zum BeispielWie ersetze ich den genauen Satz von Wörtern?

trash<- c("de" , "do", "das", ...., "da") # this set can be with n elements 

Auch habe ich eine data.frame namens matc mit zwei Variablen v1 und v2, die Ich mag würde den Ersatz eines jeden Wortes in Müll durch nichts zu übernehmen.

Als ich versuchte, dies mit dem folgenden Code zu tun:

for(k in 1:length(pr_us)) 
{ 
    matc$V1<- gsub(pr_us[k], "" , matc$V1) 
    matc$V2<- gsub(pr_us[k], "" , matc$V2) 
} 

der Ersatz nicht exakt ist. Mit anderen Worten, wenn Matc $ V1 "Maria da Graça Madalena" ist, ist das Ergebnis "Maria Graça Malena" und ich hätte gerne folgendes Ergebnis "Maria Graça Madalena". Ich habe versucht, so etwas wie diese

for(k in 1:length(pr_us)) 
{ 
    matc$V1<- gsub(paste0(pr_us[k], "\bb") , "" , matc$V1) 
    matc$V2<- gsub(paste0(pr_us[k], "\bb") , "" , matc$V2) 
} 

Aber diese auch nicht funktionieren.

Gibt es eine Lösung, die die Schleife vermeidet? Einige Lösung mit den Funktionen anwenden ...

+0

Sie verwenden könnten 'grep' mit regex –

+0

http://stackoverflow.com/questions/22888646/making-gsub-only-replace-entire-words –

+1

Machst du Text Mining? Das 'tm' Paket hat Funktionen (insbesondere' removeWords() '), die das einfach machen. –

Antwort

1

Da Sie Wort übereinstimmen, ist es sinnvoller, Leerzeichen vor und nach dem Trash-Wort einzuschließen. So für das spezifische Beispiel OP gibt, kann es sein:

gsub("\\s+da\\s+", " ", "Maria da Graça Madalena") 
[1] "Maria Graça Madalena" 
+1

Eine Wortgrenze '\\ b' wäre passender als ein Leerzeichen, wenn eine Interpunktion vorliegt oder das Wort das erste oder letzte in der Zeichenfolge ist. – Gregor

Verwandte Themen