2013-05-14 11 views
5

में स्ट्रिंग को प्रतिस्थापित करें, मैं एक बड़ी स्ट्रिंग को एक बड़े डेटा में बदलने की कोशिश कर रहा हूं। फ्रेम। मुझे अभी निम्न समाधान मिला है लेकिन gsub मूल डेटा.फ्रेम लेआउट को संरक्षित नहीं करता है। इसे कैसे प्राप्त किया जा सकता है।डेटाफ्रेम

मेरा मतलब है कि मैं एक स्ट्रिंग को प्रतिस्थापित करना चाहता हूं और डीएफ के लेआउट को बदलना नहीं चाहता हूं।

test<-data.frame(a=c("a","b","c","d"),b=c("a","e","g","h"),c=c("i","j","k","a")) 
gsub("a","new",test) 

Thx

उत्तर

14

आप lapply चाहते हैं character या factor प्रविष्टियों और फिर gsub लागू करने के उचित रूप से करने के लिए अपने data.frame परीक्षण के माध्यम से:

इस उदाहरण पर विचार। परिणाम list होगा, लेकिन as.data.frame इसे ठीक करता है।

test$val <- 1:4 # a non character/factor variable 
(test2 <- as.data.frame(lapply(test,function(x) if(is.character(x)|is.factor(x)) gsub("a","new",x) else x))) 
    a b c val 
1 new new i 1 
2 b e j 2 
3 c g k 3 
4 d h new 4 
class(test2$val) # to see if it is unchanged 
[1] "integer" 
+0

आपने पूरी अभिव्यक्ति को ब्रैकेट में क्यों लपेटा? –

+3

@ रिचर्डस्मिथ जो अभिव्यक्ति को इसके परिणाम को कंसोल पर स्पष्ट रूप से वापस कर देता है। असाइनमेंट आम तौर पर अदृश्य रूप से लौटाया जाता है। – James

6
as.data.frame(sapply(test, function(x) gsub("a", "new", x))) 
+0

धन्यवाद, लेकिन है कि मुझे एक चरित्र मैट्रिक्स देता है, मेरी df संख्यात्मक मानों भी तो मैं जब डेटा आगे – rainer

+1

मैं सिर्फ अपने उदाहरण के साथ काम कर रहा था प्रसंस्करण समस्याएं आ गया है। – Thomas