2012-09-07 8 views
5

मैं एक डेटा फ्रेम में एक से अधिक पूर्णांक कॉलम, NAS के साथ सभी कि मैं इस तरह एक आउटपुट उत्पादन 0.पुनःकूटित NAS

df1 <- as.data.frame(sapply(paste(sample(letters,50,T),sample(letters,10), sep=""), function(x) {sample(c(NA,0:5),10,T)})) 
df2 <- as.data.frame(sapply(paste(sample(letters,5,T),sample(letters,10,T), sep=""), function(x) {sample(letters[1:5],10,T)})) 
df <- cbind(df2,df1) 

को पुनःकूटित करने की जरूरत है ... (केवल पहले कुछ 55 दिखाया गया है) के कॉलम

enter image description here

मैं मैन्युअल रूप से प्रत्येक स्तंभ के लिए df$col[is.na(df$col)] <- 0 तरह 0 NAS recoding के बारे में जा सकते हैं, लेकिन यह देखते हुए इतने सारे कॉलम देखते हैं कि, यह है कि सभी बाहर टाइप करने के लिए कुछ समय ले जाएगा ।

मैं इन सभी एनएएस को लाइन या तीन में 0 में कैसे रिकोड कर सकता हूं?

(मुझे पता है मैं पूर्णांक कॉलम पिघल सकते हैं और फिर एक पिघला स्तंभ पुनःकूटित, लेकिन मैं नहीं बल्कि आधार आर में ऐसा चाहते हैं)

उत्तर

11

तुम बहुत करीब थे:

df[is.na(df)] <- 0 
+0

ओह .... विश्वास नहीं कर सकता यह है कि आसान था। फिर मैं उन सभी के बजाय रिकोड करने के लिए कॉलम की एक श्रृंखला निर्दिष्ट कैसे कर सकता हूं? –

+1

कभी नहीं, मुझे मिल गया। 'डीएफ [6:10] [is.na (डीएफ [6:10])] <- 0'। मैंने एक पंक्ति में दो वर्ग ब्रैकेट जोड़ने का भी विचार नहीं किया था। –

+0

@ टॉमीओडेल, कोई समस्या नहीं। जैसे मैंने कहा, तुम बहुत करीब थे! – A5C1D2H2I1M1N2O1R2T1

2

का उपयोग करना plyr के colwise मेटा-समारोह इस आसान बनाता है:

dfZ=colwise(function(x)ifelse(is.na(x),0,x))(df) 
+1

हालांकि @ mrdwab की विधि निश्चित रूप से टाइप करने के लिए कम है। –

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