2011-09-06 15 views
17

के साथ डेटा फ्रेम में इंटरपोलेट एनए मान na.approx() के साथ इंटरपोलेशन द्वारा मेरे डेटा फ्रेम से NA एस को निकालने का प्रयास कर रहा हूं लेकिन NA एस को हटा नहीं सकता।na.approx

मेरा डेटा फ्रेम गैर-मान्य मूल्य के लिए ध्वज के रूप में 270.15 के साथ 4096x4096 है। मुझे मौसम संबंधी मॉडल को खिलाने के लिए सभी बिंदुओं में निरंतर डेटा होने की आवश्यकता है। कल मैंने पूछा, और एक अन्य डेटा फ्रेम के आधार पर डेटा फ्रेम में मूल्यों को प्रतिस्थापित करने के तरीके पर एक उत्तर प्राप्त किया। लेकिन उसके बाद मैं na.approx() पर आया और फिर NA के साथ 270.15 मानों को प्रतिस्थापित करने का निर्णय लिया और डेटा को इंटरपोल करने के लिए na.approx() को आजमाएं। लेकिन सवाल यह है कि na.approx() सभी एनएएस को प्रतिस्थापित नहीं करता है।

  • एनए

    साथ
    > sst4[sst4 == 270.15 ] = NA 
    
  • सबसेट डेटा फ्रेम (4094x4096)
  • स्थानापन्न झंडा मूल्य hdf5load के साथ मूल HDF फ़ाइल पढ़ें:

    यह मैं क्या कर रहा हूँ है

    पहले कॉलम (या कोई अन्य) देखें

    > summary(sst4[,1]) 
    
    Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 
    271.3 276.4 285.9 285.5 292.3 302.8 1345.0 
    
  • भागो na.approx

    > sst4=na.approx(sst4,na.rm="FALSE") 
    
  • चेक पहले कॉलम

    > summary(sst4[,1]) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 
    271.3 276.5 286.3 285.9 292.6 302.8 411.0 
    

आप देख सकते हैं 411 एनए निकाल नहीं किया गया है। क्यूं कर? क्या वे सभी अग्रणी/समापन कॉलम मानों से मेल खाते हैं?

head(sst4[,1]) 
[1] NA NA NA NA NA NA 
tail(sst4[,1]) 
[1] NA NA NA NA NA NA 

क्या नाप से पहले और बाद में वैध मूल्य रखने के लिए na.approx द्वारा इसकी आवश्यकता है? क्या मुझे किसी अन्य na.approx विकल्प को सेट करने की आवश्यकता है?

आपको बहुत बहुत

उत्तर

12

एक छोटी सी, प्रतिलिपि प्रस्तुत करने योग्य उदाहरण:

library(zoo) 
set.seed(1) 
m <- matrix(runif(16, 0, 100), nrow = 4) 
missing_values <- sample(16, 7) 
m[missing_values] <- NA 
m 
     [,1]  [,2]  [,3]  [,4] 
[1,] 26.55087 20.16819 62.911404 68.70228 
[2,] 37.21239  NA 6.178627 38.41037 
[3,]  NA  NA  NA  NA 
[4,] 90.82078 66.07978  NA  NA 

na.approx(m) 
     [,1]  [,2]  [,3]  [,4] 
[1,] 26.55087 20.16819 62.911404 68.70228 
[2,] 37.21239 35.47206 6.178627 38.41037 
[3,] 64.01658 50.77592  NA  NA 
[4,] 90.82078 66.07978  NA  NA 

m[4, 4] <- 50 
na.approx(m) 
     [,1]  [,2]  [,3]  [,4] 
[1,] 26.55087 20.16819 62.911404 68.70228 
[2,] 37.21239 35.47206 6.178627 38.41037 
[3,] 64.01658 50.77592  NA 44.20519 
[4,] 90.82078 66.07978  NA 50.00000 

हाँ, लगता है कि आप या स्तंभों के प्रारंभ/समाप्ति मूल्यों में जाना जाने की जरूरत है प्रक्षेप काम नहीं करता। क्या आप अपनी सीमाओं के लिए मूल्य अनुमान लगा सकते हैं?

एक और संपादित करें: तो डिफ़ॉल्ट रूप से, आपको ज्ञात कॉलम के प्रारंभ और अंत मूल्यों की आवश्यकता होती है। हालांकि rule = 2 पारित करके हमेशा रिक्त स्थान भरने के लिए na.approx प्राप्त करना संभव है। फ़ेलिक्स का जवाब देखें। गैबर की टिप्पणी के अनुसार, आप डिफ़ॉल्ट मान प्रदान करने के लिए na.fill का भी उपयोग कर सकते हैं।अंत में, आप दो दिशाओं (नीचे देखें) में सीमा स्थितियों को विभाजित कर सकते हैं या सीमा की स्थिति अनुमान लगा सकते हैं।


संपादित करें: एक और सोचा। चूंकि na.approx कॉलम में केवल इंटरपोलेट कर रहा है, और आपका डेटा विशाल है, शायद पंक्तियों में अंतरण भी उपयोगी होगा। फिर आप औसत ले सकते हैं।

na.approx विफल रहता है जब पूरे कॉलम NA होते हैं, इसलिए हम एक बड़ा डेटासेट बनाते हैं।

set.seed(1) 
m <- matrix(runif(64, 0, 100), nrow = 8) 
missing_values <- sample(64, 15) 
m[missing_values] <- NA 

रन na.approx दोनों तरीकों से चलाएं।

by_col <- na.approx(m) 
by_row <- t(na.approx(t(m))) 

सबसे अच्छा अनुमान खोजें।

default <- 50 
best_guess <- ifelse(is.na(by_row), 
    ifelse(
    is.na(by_col), 
    default,    #neither known 
    by_col    #only by_col known 
), 
    ifelse(
    is.na(by_col), 
    by_row,    #only by_row known 
    (by_row + by_col)/2 #both known 
) 
) 
+0

धन्यवाद रिची। मैं सीमाओं के लिए मूल्य अनुमान लगाने की कोशिश करूंगा; क्योंकि मेरे एसएसटी डेटाबेस का स्थानिक विस्तार मेट मॉडल डोमेन से बहुत बड़ा है जिसका उपयोग मैं करूँगा मैं सीमाओं पर मूल्यों के बारे में विशेष रूप से चिंतित नहीं हूं। मुझे वास्तव में डेटा फ्रेम के केंद्रीय क्षेत्र में एनए मानों को भरना है। – pacomet

+0

जो भी मुझे कम करता है, कृपया आप एक टिप्पणी छोड़ सकते हैं जो आपको पसंद नहीं आया। यदि आप प्रतिक्रिया प्रदान नहीं करते हैं तो मैं जवाब में सुधार नहीं कर सकता। –

+0

-1 सच नहीं है कि आपको प्रारंभ और अंत मूल्यों की आवश्यकता है। अंतिम बिंदु फ़ेलिक्स के उत्तर में या 'na.fill' में विस्तारित किया जा सकता है। –

1

मुझे लगता है कि आप डॉक्स

na.rm तार्किक से na.rm=TRUE

स्थापित करने के लिए प्रयास करना चाहिए धन्यवाद। एनएएस को हटाया जाना चाहिए?

http://www.oga-lab.net/RGM2/func.php?rd_id=zoo:na.approx

+0

हाय हेनरिक। अगर मैं na.rm = TRUE सेट करता हूं तो मुझे 3818x4096 डेटा फ्रेम मिलता है और मुझे सभी 4096x4096 मानों को बनाए रखने की आवश्यकता होती है। – pacomet

+0

हम्म, फैंसी इंटरपोलेशन को छोड़ने और एक साधारण पाश बनाने के बारे में कि एनए को देखते समय अंतिम गैर-एनए मूल्य क्या है? – Henrik

+0

मैं आर के लिए नया हूं और लूप सिंटैक्स की तलाश करनी होगी, मैं बुनियादी आदेशों के साथ प्रबंधन करने की कोशिश कर रहा हूं। मैं अंतिम गैर-एनए मान कैसे रखूं? क्या होता है यदि कॉलम में पहला मान NA है? साथ ही, मैं डेटा मानों के बीच एक चिकनी संक्रमण पसंद करता हूं। ये समुद्र की सतह के तापमान मूल्य हैं और एनएएस जमीन पर अंक हैं जहां समीकरण को हल करते समय मेटल मॉडल को संख्यात्मक समस्याओं से बचने के लिए "यथार्थवादी" मानों की आवश्यकता होती है। तुम्हारे सुझाव के लिए धन्यवाद। – pacomet

9

na.approx() केवल मूल्यों interpolating, नहीं उन्हें Extrapolating, डिफ़ॉल्ट रूप से में approx() समारोह इस प्रकार है। हालांकि, जैसा कि approx() के लिए सहायता पृष्ठ में वर्णित है, आप निकटतम चरम के निरंतर मूल्य के रूप में extrapolate करने के लिए rule = 2 निर्दिष्ट कर सकते हैं। रिची कपास के उदाहरण के बाद:

na.approx(m, rule = 2) 
     [,1]  [,2]  [,3]  [,4] 
[1,] 26.55087 20.16819 62.911404 68.70228 
[2,] 37.21239 35.47206 6.178627 38.41037 
[3,] 64.01658 50.77592 6.178627 38.41037 
[4,] 90.82078 66.07978 6.178627 38.41037 

समतुल्य रूप से, आप स्पष्ट रूप से "अंतिम अवलोकन आगे बढ़ने" का उपयोग कर सकते हैं।

na.locf(na.approx(m)) 
## "first observation carry backwards" too: 
na.locf(na.locf(na.approx(m)), fromLast = TRUE) 
+0

आपके उत्तर के लिए धन्यवाद। यह काम करता है लेकिन शायद मेरे डेटा के लिए अच्छा नहीं है। चूंकि डेटा समुद्र की सतह का तापमान है, इसलिए एनए डेटा समुद्र से अधिक होने पर स्थिर मूल्य के रूप में बाहर निकलना अच्छा नहीं है (हालांकि अधिकांश एनए मामले भूमि बिंदुओं पर हैं) जहां ग्रिड पॉइंट्स के बीच चिकनी संक्रमण आमतौर पर आपको मिलता है। – pacomet

+0

'na.approx (... नियम = 2) 'मैनपेज पर शानदार रूप से अनियंत्रित है! इसे 70 पेज पीडीएफ दस्तावेज़ में दफनाया गया है। – smci

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

  • कोई संबंधित समस्या नहीं^_^