2010-04-10 5 views
26

आप एक डीएसएल डेटा विश्लेषण करने के उद्देश्य से से उम्मीद होती है के रूप में, आर लापता हैंडल/अधूरा डेटा बहुत अच्छी तरह से, उदाहरण के लिए:आर में लापता/अपूर्ण डेटा को संभालना - क्या मास्क पर काम करता है लेकिन एनएएस को नहीं हटाता है?

कई अनुसंधान कार्यों एक na.rm झंडा जब सही को सेट किए गए , NAS निकालें:

>>> v = mean(c(5, NA, 6, 12, NA, 87, 9, NA, 43, 67), na.rm=T) 
>>> v 
     (5, 6, 12, 87, 9, 43, 67) 

लेकिन आप से पहले NAS से निपटने के लिए समारोह कॉल करना चाहते हैं, तो आप इस तरह कुछ करने की जरूरत है:

एक वेक्टर से प्रत्येक 'एनए' दूर करने के लिए:

vx = vx[!is.na(a)] 

एक वेक्टर से प्रत्येक 'एनए' को हटा कर उसे w/एक '0' को बदलने के लिए:

ifelse(is.na(vx), 0, vx) 

प्रत्येक पंक्ति पूरे दूर करने के लिए कि एक डेटा फ्रेम से 'लागू नहीं' शामिल हैं:

dfx = dfx[complete.cases(dfx),] 

इन कार्यों के सभी स्थायी रूप से उन में एक 'एनए' के ​​साथ हटाने 'एनए' या पंक्तियों।

कभी-कभी यह वही नहीं है जो आप चाहते हैं - वर्कफ़्लो में अगले चरण के लिए डेटा फ्रेम की 'एनए'-एक्साइज्ड प्रतिलिपि बनाना आवश्यक हो सकता है लेकिन बाद के चरणों में आप अक्सर उन पंक्तियों को वापस चाहते हैं (उदाहरण के लिए , एक कॉलम के लिए कॉलम-वार आंकड़े की गणना करने के लिए जिसमें 'पूर्ण मामलों' के लिए पूर्व कॉल के कारण पंक्तियां गायब हैं, फिर भी कॉलम में 'एनए' मान नहीं हैं)।

मैं क्या तलाश कर रहा हूँ के बारे में संभव के रूप में स्पष्ट होना: अजगर/numpy एक वर्ग, नकाबपोश सरणी, एक मुखौटा विधि के साथ, आप छुपाने --but नहीं remove-- की सुविधा देता है जो है फ़ंक्शन कॉल के दौरान एनएएस। क्या आर में एक समान कार्य है?

उत्तर

18

लापता डेटा के साथ वास्तव में क्या करना है - जिसे NA के रूप में फ़्लैग किया जा सकता है यदि हमें पता है कि यह गुम है - डोमेन से डोमेन से काफी भिन्न हो सकता है।

समय श्रृंखला है, जहां आपको छोड़ देना चाहिए, या भरने, या अंतर्वेशन, या अलग ढंग से अंतर्वेशन चाहते हो सकता है से संबंधित एक उदाहरण लेते हैं, ... यह है कि सिर्फ (बहुत उपयोगी और लोकप्रिय) zoo इन सभी कार्य करता है NA से निपटने से संबंधित:

zoo::na.approx zoo::na.locf  
zoo::na.spline zoo::na.trim  

(अलग एल्गोरिदम का उपयोग करके) अनुमान लगाने के लिए अनुमति देता है, ले जाने के-आगे या पीछे, पट्टी प्रक्षेप का उपयोग करें या ट्रिम।

एक और उदाहरण सीआरएएन पर कई गायब प्रतिबाधा पैकेज होंगे - अक्सर डोमेन-विशिष्ट समाधान प्रदान करते हैं। [तो यदि आप आर डीएसएल कहते हैं, तो यह क्या है? "डोमेन विशिष्ट भाषाओं के लिए उप डोमेन विशिष्ट समाधान" या एसडीएसएसएफडीएसएल? काफी मुंह :) :)

लेकिन आपके विशिष्ट प्रश्न के लिए: नहीं, मुझे बेस आर में थोड़ा-स्तरीय झंडा पता नहीं है जो आपको अवलोकन को 'बाहर रखा जाना' के रूप में चिह्नित करने की अनुमति देता है। मुझे लगता है कि अधिकांश आर उपयोगकर्ता na.omit() एट अल जैसे कार्यों का सहारा लेते हैं या आपके द्वारा उल्लिखित na.rm=TRUE विकल्प का उपयोग करते हैं।

+1

चिड़ियाघर का आपका लिंक टूटा हुआ है। [यहां] (http://cran.r-project.org/web/packages/zoo/zoo.pdf) नवीनतम दस्तावेज का एक लिंक है जो मुझे मिल सकता है (.pdf चेतावनी), और [यहां] (http://cran.r-project.org/web/packages/zoo/index.html) मुझे लगता है कि चिड़ियाघर का नवीनतम सारांश है जो एक लिंक है। यूआरएल में – deadstump

+1

गलत बहुवचन 'के रूप में यह' पैकेज = ... 'है,' पैकेज = ... 'नहीं। अब तय, धन्यवाद। –

15

डेटा को देखने के लिए यह एक अच्छा अभ्यास है, इसलिए गायब मानों के प्रकार के बारे में अनुमान लगाएं: क्या यह एमसीएआर (पूर्ण और यादृच्छिक याद आ रही है), एमएआर (यादृच्छिक रूप से गायब) या एमएनएआर (यादृच्छिक रूप से अनुपलब्ध नहीं है)? इन तीन प्रकारों के आधार पर, आप लापता मूल्यों की अंतर्निहित संरचना का अध्ययन कर सकते हैं और यह निष्कर्ष निकाल सकते हैं कि प्रतिबाधा लागू है या नहीं (आप भाग्यशाली हैं अगर यह एमएनएआर नहीं है, 'कारण, उस मामले में, गुम मूल्यों को गैर-अनजान माना जाता है, और हैं कुछ अज्ञात अंतर्निहित प्रभाव, कारक, प्रक्रिया, परिवर्तनीय ... से संबंधित)।

में "आर और GGobi के साथ डाटा के लिए इंटरएक्टिव और गतिशील ग्राफिक्स विश्लेषक" अध्याय 3. द्वारा Di कुक और डेबोरा Swayne इस विषय के बारे में महान संदर्भ है।

आपको इस अध्याय में कार्रवाई में norm पैकेज दिखाई देगा, लेकिन Hmisc पैकेज में डेटा प्रतिपादन दिनचर्या है। Amelia, cat (स्पष्ट मिसाइल प्रतिबाधा के लिए), mi, mitools, VIM, vmv (डेटा विज़ुअलाइज़ेशन के लिए अनुपलब्ध) देखें।

ईमानदारी से, मुझे अभी भी आंकड़ों के बारे में आपका प्रश्न नहीं है, या आर डेटा प्रतिबाधा क्षमताओं के बारे में काफी जानकारी नहीं है? मुझे लगता है कि मैंने दूसरे पर अच्छे संदर्भ दिए हैं, और पहले के बारे में: आप अपने एनए को या तो केंद्रीय प्रवृत्ति (माध्य, औसत, या इसी तरह) के साथ प्रतिस्थापित कर सकते हैं, इसलिए परिवर्तनीयता को कम करें, या यादृच्छिक निरंतर "खींचा गया" मनाए गए (रिकॉर्ड किए गए) मामलों में, या आप वैरिएबल के साथ रिग्रेशन विश्लेषण लागू कर सकते हैं जिसमें एनए के मानदंड के रूप में, और भविष्यवाणियों के रूप में अन्य चर शामिल हैं, फिर एनए के अवशिष्ट को असाइन करें ... यह एनए के साथ सौदा करने का एक शानदार तरीका है, लेकिन अक्सर यह नहीं होगा अपने सीपीयू पर आसान हो जाओ (मेरे पास 1.1GHz पर सेलेरॉन है, इसलिए मुझे कोमल होना है)।

यह एक अनुकूलन समस्या है ... कोई निश्चित उत्तर नहीं है, आपको तय करना चाहिए कि आप कुछ विधि के साथ क्या चिपके हुए हैं। लेकिन डेटा देखने के लिए हमेशा अच्छा अभ्यास है! =) कुक & स्वैने की जांच करना सुनिश्चित करें - यह एक उत्कृष्ट, कुशलतापूर्वक लिखित मार्गदर्शिका है। "आर के साथ रैखिक मॉडल"फरवे में गुम मूल्यों के बारे में एक अध्याय भी शामिल है।

तो वहां।

गुड लक! =)

8

फ़ंक्शन na.exclude() आपकी इच्छा के अनुसार लगता है, हालांकि यह कुछ (महत्वपूर्ण) कार्यों के लिए केवल एक विकल्प है। na.fail(), na.pass(), na.omit(), और na.exclude():

फिटिंग और मॉडलों के साथ काम करने के संदर्भ में, आर NAS से निपटने के लिए सामान्य कार्यों के एक परिवार है। ये बदले में, आर के कुछ प्रमुख मॉडलिंग कार्यों, जैसे lm(), glm(), और nls() के साथ-साथ MASS, rpart, और अस्तित्व पैकेजों में फ़ंक्शंस के लिए तर्क हैं।

सभी चार सामान्य कार्य मूल रूप से फ़िल्टर के रूप में कार्य करते हैं। na.fail() कोई एनएएस नहीं होने पर ही डेटा पास कर देगा, अन्यथा यह विफल हो जाता है। na.pass() सभी मामलों के माध्यम से गुजरता है। na.omit() और na.exclude() दोनों एनएएस के साथ मामलों को छोड़ देंगे और अन्य मामलों को पार करेंगे। लेकिन na.exclude() में एक अलग विशेषता है जो परिणामस्वरूप ऑब्जेक्ट को एनएएस को ध्यान में रखकर कार्यों को संसाधित करती है। यदि आपने attributes(na.exclude(some_data_frame)) किया है तो आप यह विशेषता देख सकते हैं।यहां एक प्रदर्शन है कि na.exclude() रैखिक मॉडल के संदर्भ में predict() के व्यवहार को बदलता है।

fakedata <- data.frame(x = c(1, 2, 3, 4), y = c(0, 10, NA, 40)) 

## We can tell the modeling function how to handle the NAs 
r_omitted <- lm(x~y, na.action="na.omit", data=fakedata) 
r_excluded <- lm(x~y, na.action="na.exclude", data=fakedata) 

predict(r_omitted) 
#  1  2  4 
# 1.115385 1.846154 4.038462 
predict(r_excluded) 
#  1  2  3  4 
# 1.115385 1.846154  NA 4.038462 

आपकी डिफ़ॉल्ट na.action, वैसे, options("na.action") द्वारा निर्धारित और na.omit() के रूप में शुरू होता है लेकिन आप इसे सेट कर सकते हैं है।

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