2015-08-05 7 views
5

Ho bisogno di rimuovere tutto dopo il punto interrogativo in una colonna.Rimozione di tutto dopo un carattere in una colonna in R

Ho un insieme di dati EX:

my.data 

BABY  MOM  LANDING 
mark  dina  www.example.com/?kdvhzkajvkadjf 
tom  becky www.example.com/?ghkadkho[qeu 
brad  tina  www.example.com/?klsdfngal;j 

Voglio che i miei nuovi dati da:

new.data 

BABY  MOM  LANDING 
mark  dina  www.example.com/? 
tom  becky www.example.com/? 
brad  tina  www.example.com/? 

Come faccio a dire R per rimuovere tutto ciò dopo la ? in my.data$LANDING?

risposta

10

Possiamo usare sub per rimuovere i caratteri che sono dopo ?. Usiamo un lookbehind positivo ((?<=\\?).*) per abbinare uno o più caratteri (.) che è preceduto da ? e sostituirlo con ''.

my.data$LANDING <- sub('(?<=\\?).*$', '', my.data$LANDING, perl=TRUE) 
my.data 
# BABY MOM  LANDING 
#1 mark dina www.example.com/? 
#2 tom becky www.example.com/? 
#3 brad tina www.example.com/? 

o un'altra opzione potrebbe essere quella di utilizzare capture groups e quindi sostituire il secondo argomento con il gruppo di cattura (\\1).

my.data$LANDING <- sub('([^?]+\\?).*', '\\1', my.data$LANDING) 

Qui, abbiniamo tutti i caratteri che non sono ? ([^?]+) seguito da ? (\\?) e usare le parentesi per catturare come gruppo (([^?]+\\?)), e lasciamo il resto dei personaggi non nel gruppo (.*).

O come @Frank menzionato nei commenti, possiamo abbinare il ? e il resto dei caratteri (.*) e sostituirlo con \\? come secondo argomento.

my.data$LANDING <- sub("\\?.*","\\?",my.data$LANDING) 
+1

Invece di un lookbehind, è possibile sostituire la query con una stringa vuota: 'sub ("?. \\ *", "? \\", my.data $ ATTERRAGGIO)' – Frank

+1

Grazie che è stato esattamente quello di cui avevo bisogno –

Problemi correlati