2014-06-09 15 views
5

Ich arbeite an einem Twitter-Datensatz in R und ich finde es schwierig, Benutzernamen aus Tweets zu entfernen.Muster ersetzen in R

Dies ist ein Beispiel für die Tweets in dem Tweet Spalte meines Datasets:

[1] "@danimottale: 2 bad our inalienable rights offend their sensitivities. U cannot reason with obtuse zealotry. // So very well said."   
[2] "@FreeMktMonkey @drleegross Want to build HSA throughout lifetime for when older thus need HDHP not to deplete it if ill before 65y/o.thanks" 

Ich möchte alle Wörter entfernen/ersetzen mit „@“ beginnen diese Ausgabe zu erhalten:

[1] "2 bad our inalienable rights offend their sensitivities. U cannot reason with obtuse zealotry. // So very well said."   
[2] "Want to build HSA throughout lifetime for when older thus need HDHP not to deplete it if ill before 65y/o.thanks" 

Diese gsub-Funktion entfernt nur das "@" -Symbol.

Ich möchte sagen, entfernen Sie die Zeichen folgenden Textsymbol, bis Sie ein Leerzeichen oder Interpunktionszeichen begegnen. Ich

begann nur versucht, mit Raum zu tun, aber ohne Erfolg:

gsub("@.*[:space:]$", "", tweetdata$tweets) 

diese entfernt die zweite tweet ganz

gsub("@.*[:blank:]$", "", tweetdata$tweets) 

dies nicht die Ausgabe ändert.

Ich werde für Ihre Hilfe dankbar sein.

Antwort

9

Sie können Folgendes verwenden. \S+ entspricht allen Nicht-Whitespace Zeichen (1 oder mehrmals), gefolgt von einer übereinstimmenden Leerzeichen Zeichen.

gsub('@\\S+\\s', '', noRT$text) 

Working Demo

EDIT: Ein negierte Spiel auch gut funktionieren würde (nur mit dem Leerzeichen)

gsub('@[^ ]+ ', '', noRT$text) 
+1

Vielen Dank - sehr hilfreich, schade, ich kann nicht abstimmen, weil ich neu bin. – user3722736

+1

@ user3722736 Sie können diese Lösung überprüfen, wenn sie Ihren Bedürfnissen entspricht, indem Sie auf das Häkchen links unterhalb der oberen Stimmenzahl klicken. –

+0

Verwenden Sie "sub" statt "gsub", da nur eine Substitution vorhanden ist. –

1

Der hier regex Ansatz ist einfach und nach vorne gerade. Ich füge eine zweite Option hinzu, die es erlaubt, Text zwischen zwei beliebigen Grenzen zu entfernen, indem ich qdap's genX Funktion verwende. Auf diese Weise können Sie eine linke und eine rechte Grenze angeben.

library(qdap) 
genX(x, "@", "\\s") 

## [1] "2 bad our inalienable rights offend their sensitivities. U cannot reason with obtuse zealotry. // So very well said." 
## [2] "Want to build HSA throughout lifetime for when older thus need HDHP not to deplete it if ill before 65y/o.thanks"  
+1

Vielen Dank, es ist großartig, eine andere Lösung zu sehen. Ich wünschte, ich könnte deine Antwort abstimmen, aber ich habe noch keinen Ruf. – user3722736

Verwandte Themen