2013-08-09 5 views
17

मैं निम्नलिखित स्क्रिप्ट का उपयोग कर शून्य से NaN मूल्यों को बदलने के लिए करने की कोशिश की:NaN मान को शून्य डेटा के साथ एक विशाल डेटा फ्रेम में कैसे बदलें?

rapply(data123, f=function(x) ifelse(is.nan(x),0,x), how="replace") 
# [31] 0.00000000 -0.67994832 0.50287454 0.63979527 1.48410571 -2.90402836 

NaN मूल्य शून्य होने के लिए दिखाया जा रहा था लेकिन जब मैं डेटा फ्रेम के नाम में टाइप और इसकी समीक्षा करने की कोशिश की, मूल्य था अभी भी NaN शेष है।

data123$contri_us 
# [31]   NaN -0.67994832 0.50287454 0.63979527 1.48410571 -2.90402836 

मैं rapply आदेश वास्तव में डेटा फ्रेम में समायोजन लागू करने गया था कि क्या यकीन नहीं है, या सिर्फ प्रति के रूप में दिखाया मूल्य बदल दिया।

कोई विचार वास्तव में NaN मान शून्य से कैसे बदलें?

+3

के लिए संपादित तुम बस 'data123 [is.nan (data123)] <ऐसा नहीं कर सकते - 0'? –

+0

मैंने कोशिश की लेकिन आर ने निम्न त्रुटि संदेश दिया:> is.nan में त्रुटि (डेटा 123): प्रकार 'सूची' – cactussss

उत्तर

14

आप क्या चाहते हैं क्या करना चाहिए निम्नलिखित:

x <- data.frame(X1=sample(c(1:3,NaN), 200, replace=TRUE), X2=sample(c(4:6,NaN), 200, replace=TRUE)) 
head(x) 
x <- replace(x, is.na(x), 0) 
head(x) 
56

यह प्रतीत होता है is.na विपरीत is.nan वास्तव में डेटा फ्रेम के लिए एक विधि नहीं है कि। तो, चलो इसे ठीक करें!

is.nan.data.frame <- function(x) 
do.call(cbind, lapply(x, is.nan)) 

data123[is.nan(data123)] <- 0 
+3

के लिए डिफ़ॉल्ट विधि लागू नहीं की गई है आपका निचला फ़ंक्शन "is.nan.data.frame" होना चाहिए। – Dombey

+13

@ डोम्बे की आवश्यकता नहीं है; विधि प्रेषण के जादू द्वारा, 'is.nan.data.frame' स्वचालित रूप से कॉल किया जाएगा। –

13

वास्तव में, आर में, इस आपरेशन बहुत आसान है:

मैट्रिक्स 'एक' कुछ NaN होता है, तो आप सिर्फ 0 से इसे बदलना निम्नलिखित कोड का उपयोग करना

हैं:

a <- matrix(c(1, NaN, 2, NaN), ncol=2, nrow=2) 
a[is.nan(a)] <- 0 
a 

डेटा फ्रेम 'बी' के कुछ NaN शामिल है, तो आप सिर्फ 0 से इसे बदलना निम्नलिखित कोड का उपयोग करने की जरूरत है:

#for a data.frame: 
b <- data.frame(c1=c(1, NaN, 2), c2=c(NaN, 2, 7)) 
b[is.na(b)] <- 0 
b 

अंतर is.nan पर ध्यान दें जब यह डेटा फ्रेम होने पर मैट्रिक्स बनाम is.na है।

कर

#... 
b[is.nan(b)] <- 0 
#... 

पैदावार: Error in is.nan(b) : default method not implemented for type 'list' क्योंकि ख एक डेटा फ्रेम है।

नोट: छोटी लेकिन भ्रामक लिखने की त्रुटियों

+0

इस धागे में सर्वश्रेष्ठ स्पष्टीकरण। धन्यवाद – JdM

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