आर

2015-08-05 4 views
5

में किसी कॉलम में किसी वर्ण के बाद सब कुछ हटाकर मुझे कॉलम में प्रश्न चिह्न के बाद सबकुछ हटाने की आवश्यकता है।आर

मैं एक डेटा निर्धारित किया है 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 

मैं अपने नए डेटा होना चाहते हैं:

new.data 

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

मैं आर कैसे बता my.data$LANDING में ? के बाद सब कुछ दूर करने के लिए करते हैं?

उत्तर

10

हम ? के बाद वाले वर्णों को हटाने के लिए sub का उपयोग कर सकते हैं। हम एक या अधिक वर्ण (.) से मेल खाने के लिए एक सकारात्मक lookbehind ((?<=\\?).*) का उपयोग करते हैं जो ? से पहले है और इसे '' से प्रतिस्थापित करें।

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

या किसी अन्य विकल्प capture groups उपयोग करना और फिर कब्जा समूह (\\1) के साथ दूसरा तर्क को बदलने के लिए किया जाएगा।

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

यहाँ, हम सभी वर्णों कि ? ([^?]+) ? (\\?) द्वारा पीछा किया और प्रयोग कोष्ठकों एक समूह (([^?]+\\?)) के रूप में कब्जा करने के लिए नहीं कर रहे हैं से मेल खाते हैं, और हम (समूह में नहीं पात्रों के बाकी छोड़ .*)।

या के रूप में @Frank टिप्पणी में उल्लेख किया है, हम ? और वर्ण (.*) के बाकी मिलान कर सकते हैं, और दूसरा तर्क के रूप में \\? से बदलें।

my.data$LANDING <- sub("\\?.*","\\?",my.data$LANDING) 
एक lookbehind के बजाय
+1

, आप एक खाली स्ट्रिंग के साथ क्वेरी की जगह सकता है: (, my.data $ लैंिडंग "?। \\ *", "? \\") 'उप' – Frank

+1

धन्यवाद कि गया था बिल्कुल मुझे क्या चाहिए। –