2015-08-05 31 views
5

Muszę usunąć wszystko po znaku zapytania w kolumnie.Usuwanie wszystkiego po znaku w kolumnie w R

Mam zestaw danych 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 

Chcę moje nowe dane za:

new.data 

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

Jak mogę powiedzieć, R, aby usunąć wszystko po ? w my.data$LANDING?

Odpowiedz

10

Możemy użyć sub, aby usunąć znaki, które są po ?. Używamy pozytywnego lookbehind ((?<=\\?).*), aby dopasować jeden lub więcej znaków (.), które jest poprzedzone ? i zastąpić je ''.

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/? 

Albo inna opcja byłoby użyć capture groups a następnie zastąpić drugi argument z grupy przechwytującej (\\1).

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

Tutaj dopasować wszystkie znaki, które nie są ? ([^?]+), a następnie ? (\\?) i użyć nawiasów, aby uchwycić jak grupa (([^?]+\\?)), a my zajmiemy się resztą znaków nie w grupie (.*).

Lub jako @Frank wymienione w komentarzach, możemy dopasować ? i resztę znaków (.*) i zastąpić go przez \\? jako drugi argument.

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

Zamiast lookbehind, można zastąpić zapytania z pustym ciągiem: 'sub (? "\\ *", "? \\", my.data $ przystań) ' – Frank

+1

Dziękuję, który został dokładnie to, czego potrzebowałem. –