2015-11-27 5 views
7

मेरे पास एक स्ट्रिंग वेरिएबल है जिसमें वर्णमाला [ए-जेड], स्पेस [], और एस्ट्रोफ़े ['], उदाहरण हैं। x <- "a'b c" मैं एस्ट्रोफ़े ['] को खाली []] से बदलना चाहता हूं, और स्पेस [] को अंडरस्कोर [_] के साथ बदलना चाहता हूं।आर में एक gsub() या chartr() कथन में एकाधिक तारों को बदलें?

x <- gsub("'", "", x) 
x <- gsub(" ", "_", x) 

यह बिल्कुल काम करता है, लेकिन जब मेरे पास बहुत सारी स्थिति होती है, तो कोड बदसूरत हो जाता है। इसलिए, मैं chartr() का उपयोग करना चाहता हूं, लेकिन chartr() रिक्त स्थान से निपट नहीं सकता है, उदाहरण के लिए।

x <- chartr("' ", "_", x) 
#Error in chartr("' ", "_", "a'b c") : 'old' is longer than 'new' 

क्या इस समस्या को हल करने का कोई तरीका है? धन्यवाद!

+1

आप इसे पहले से ही दो gsubs के साथ हल कर चुके हैं। अगर यह बहुत बदसूरत लग रहा है, तो आप अपना खुद का रैपर फ़ंक्शन बना सकते हैं जो मुझे लगता है कि "सुंदर" है। लेकिन आप 'chartr' का उपयोग नहीं कर सकते क्योंकि" खाली "एक चरित्र नहीं है, यह एक चरित्र की कमी है। – MrFlick

उत्तर

5

आप gsubfn

library(gsubfn) 
gsubfn(".", list("'" = "", " " = "_"), x) 
# [1] "ab_c" 
9

उपयोग कर सकते हैं मैं वाक्य रचना कि magrittr पैकेज से %<>% और %>% opperators प्रदान के एक प्रशंसक हूँ।

library(magrittr) 

x <- "a'b c" 

x %<>% 
    gsub("'", "", .) %>% 
    gsub(" ", "_", .) 
x 
##[1] "ab_c" 

gusbfn अद्भुत है, लेकिन मुझे पसंद है चेनिंग %>% अनुमति देता है।

+1

तीसरे तर्क का अर्थ क्या है "।" gsub() – Ali

+2

डिफ़ॉल्ट रूप से, दाएं हाथ के पहले तर्क के लिए '%>%' के बाईं ओर वाली वस्तु * पाइप * है। यदि एलएचएस की आवश्यकता है, जैसा कि इस उदाहरण में, तीसरा तर्क है, तो '.' प्लेसहोल्डर है। अधिक जानकारी के लिए 'विग्नेट ("magrittr") देखें। – Peter

0
gsub("\\s", "", chartr("' ", " _", x)) # Use whitespace and then remove it 
0

मैं एक magrittr और/या dplyr समाधान के लिए चुनते हैं, साथ ही साथ। हालांकि, मैं ऑब्जेक्ट की एक नई प्रतिलिपि नहीं बनाना पसंद करता हूं, खासकर यदि यह किसी फ़ंक्शन में है और इसे सस्ते में वापस किया जा सकता है।

अर्थात

return(
    catInTheHat %>% gsub('Thing1', 'Thing2', .) %>% gsub('Red Fish', 'Blue 
    Fish', .) 
) 

... और इतने पर।

संबंधित मुद्दे