2011-08-05 7 views
16

मैं डेटा.फ्रेम में वर्णों को प्रतिस्थापित करने की कोशिश कर रहा हूं। मैं इसआर: gsub का उपयोग कर वर्णों को प्रतिस्थापित करें, फ़ंक्शन कैसे बनाएं?

> df <- data.frame(var1 = c("aabbcdefg", "aabbcdefg")) 
> df 
     var1 
1 aabbcdefg 
2 aabbcdefg 
> df$var1 <- gsub("a", "h", df$var1) 
> df$var1 <- gsub("b", "i", df$var1) 
> df$var1 <- gsub("c", "j", df$var1) 
> df$var1 <- gsub("d", "k", df$var1) 
> df$var1 <- gsub("e", "l", df$var1) 
> df$var1 <- gsub("f", "m", df$var1) 
> df 
     var1 
1 hhiijklmg 
2 hhiijklmg 
> 

लिए एक समाधान है, लेकिन मैं कई gsub कॉल का उपयोग, यह बहुत अच्छा होगा इस पर एक बार करने के लिए एक समारोह का उत्पादन करने से बचने के लिए चाहते हैं? आगे बढ़ने के लिए कोई विचार हो?

उत्तर

20

आप from और to वैक्टर बना सकते हैं:

from <- c('a','b','c','d','e','f') 
to <- c('h','i','j','k','l','m') 

और फिर vectorialize gsub समारोह:

gsub2 <- function(pattern, replacement, x, ...) { 
for(i in 1:length(pattern)) 
x <- gsub(pattern[i], replacement[i], x, ...) 
x 
} 

कौन देता है:

> df <- data.frame(var1 = c("aabbcdefg", "aabbcdefg")) 
> df$var1 <- gsub2(from, to, df$var1) 
> df 
     var1 
1 hhiijklmg 
2 hhiijklmg 
+1

@jrara सशर्त रूप से प्रतिस्थापन करने के लिए कोड को कैसे संशोधित करना चाहिए? निम्नलिखित उदाहरण में, मैं मेच, ऑपरेशन और इंग्लैंड को केवल तभी बदलना चाहता हूं जब वे कम हो जाएं, और मैं उन्हें पूर्ण शब्दों (यानी मैकेनिकल में मेक नहीं, या ऑपरेशंस में ऑपरेशन) के अंदर प्रतिस्थापित नहीं करना चाहता हूं। उदाहरण है : 'से <- ("मेच", "ऑपर", "इंग्लैंड") <- ("मैकेनिकल", "ऑपरेशंस", "इंजीनियर") डेटा.फ्रेम (var1 = c ("मेच", "मैकेनिकल इंजीनियर" , "ऑपर", "ऑपरेशंस")) – vatodorov

+0

एक मानक समारोह होना चाहिए, बढ़िया! –

31

आप chartr हैं:

+०१२३५१६४१०६१
df$var1 <- chartr("abcdef", "hijklm", df$var1) 
df 
#  var1 
# 1 hhiijklmg 
# 2 hhiijklmg 
9

आप chartr उपयोग करने के लिए क्योंकि प्रतिस्थापन एक से अधिक चरित्र हो सकता है नहीं करना चाहते हैं, तो एक और विकल्प gsubfn पैकेज से gsubfn उपयोग करने के लिए (मैं जानता हूँ कि इस gsub नहीं है, लेकिन gsub पर एक विस्तार है)।

> library(gsubfn) 
> tmp <- list(a='apple',b='banana',c='cherry') 
> gsubfn('.', tmp, 'a.b.c.d') 
[1] "apple.banana.cherry.d" 

प्रतिस्थापन भी एक समारोह है कि मैच लेने के लिए और है कि मैच के लिए प्रतिस्थापन मूल्य वापसी होगी हो सकता है: यहाँ एक उदाहरण है।

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