2014-06-09 4 views
5

Sto lavorando a un set di dati di Twitter in R e trovo difficile rimuovere i nomi utente dai tweet.Pattern replace in R

Questo è un esempio dei tweets nella colonna Tweet del mio set di dati:

[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" 

Voglio rimuovere/sostituire tutte le parole che iniziano con "@" per ottenere questo output:

[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" 

Questa funzione di gsub funziona semplicemente rimuovendo il simbolo "@".

Voglio dire, rimuovere i caratteri seguendo il simbolo del testo fino a quando non si incontra uno spazio o un segno di punteggiatura.

ho iniziato cercando di trattare solo con lo spazio, ma senza alcun risultato:

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

questo rimuove il secondo Tweet interamente

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

questo non cambia l'output.

Sarò grato per il vostro aiuto.

risposta

9

È possibile utilizzare quanto segue. \S+ corrisponde a qualsiasi non-spazio carattere (1 o più volte), seguito dall'abbinamento di un singolo spazio bianco carattere.

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

Working Demo

EDIT: Una partita negata avrebbe funzionato bene anche (utilizzando solo il carattere spazio)

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

Mille grazie - molto utile, peccato non posso votare perché sono nuovo. – user3722736

+1

@ user3722736 È possibile controllare questa soluzione se soddisfa le proprie esigenze facendo clic sul segno di spunta a sinistra sotto il conteggio dei voti. –

+0

Usa 'sub' invece di' gsub' dato che c'è una sola sostituzione. –

1

L'approccio regex qui è facile e semplice. Sto aggiungendo una seconda opzione che ti permette di rimuovere il testo tra 2 confini qualsiasi usando qdap's la funzione genX. Ciò consente di fornire un limite sinistro e destro.

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

Grazie, è bello vedere un'altra soluzione. Vorrei poter votare la tua risposta ma non ho ancora una reputazione. – user3722736