2009-01-24 19 views
10

मैं डेटा की फ़ाइल है कि मैं आर में लोड कर सकते हैं read.csv()डेटा फ़िल्टर करना

डेटा के कुछ याद आ रही है का उपयोग करने का एक सीएसवी है, तो मैं डेटा फ्रेम नीचे कम करने के लिए सेट करना चाहते हैं गैर हैं जिसमें संपूर्ण - डेटा खो रहा है, यानी यदि NULL कहीं भी दिखाई देता है, तो मैं फ़िल्टर किए गए डेटा सेट से उस कॉलम और पंक्ति को बाहर करना चाहता हूं।

मुझे पता है कि मैं शायद इनबिल्ट आर वेक्टर परिचालनों के साथ बस इतना ही कर सकता हूं, लेकिन मुझे पूरा यकीन नहीं है कि यह वास्तव में कैसे किया जाए?

मेरा प्रश्न थोड़ा और ठोस बनाने के लिए, यहां डेटा का एक त्वरित नमूना है ताकि आप देख सकें कि मैं क्या करना चाहता हूं।

DocID  Anno1 Anno7 Anno8 
1   7  NULL 8 
2   8  NULL 3 
44   10  2  3 
45   6  6  6 
46   1  3  4 
49   3  8  5 
62   4  NULL 9 
63   2  NULL 4 
67   11  NULL 3 
91   NULL  9  7 
92   NULL  7  5 
93   NULL  8  8 

इसलिए इस इनपुट को देखते हुए, मुझे कुछ कोड चाहिए जो आउटपुट को कम कर देगा।

DocID  Anno8 
44   3 
45   6 
46   4 
49   5 

Anno8 के रूप में गैर-शून्य डेटा के साथ ही स्तंभ है, और गैर-शून्य डेटा के साथ ही चार पंक्तियों कर रहे हैं।

उत्तर

7

तो x है अपने data.frame (या matrix) तो

x[ ,apply(x, 2, function(z) !any(is.na(z)))] 

अपने उदाहरण का उपयोग करता है के बाद से NULL, is.na(·) द्वारा is.null(·)

प्रतिस्थापित किया जाएगा वैकल्पिक रूप से आप subset(·) देख सकते हैं।

+0

में एनए की वजह से गिरा दिया जाना चाहिए धन्यवाद @ रुगा, यह उपयोगी है। यदि मैं सीएसवी के एक विशिष्ट कॉलम में, छुटकारा पाने के लिए चाहता हूं, तो यह कैसे काम करेगा, किसी भी मूल्य के कम से कम 5 कहें? – Rodolphe

19

आप na.omit() का उपयोग कर गायब युक्त किसी भी पंक्ति को छोड़ सकते हैं, हालांकि यह वही नहीं है जो आप चाहते हैं। इसके अलावा, वर्तमान में स्वीकृत उत्तर गलत है। यह आपको पूर्ण कॉलम देता है, लेकिन उन पंक्तियों को नहीं छोड़ता है जिनमें एक या अधिक गुम मूल्य हैं, जिन्हें पूछा गया था। सही उत्तर प्राप्त किया जा सकता है:

> a <- data.frame(a=c(1,2),b=c(NA,1), c=c(3,4)) 
> a 
    a b c 
1 1 NA 3 
2 2 1 4 
> na.omit(a)[,colSums(is.na(a))==0] 
    a c 
2 2 4 

देखने के लिए कि उपरोक्त जवाब गलत है:

> a[ ,apply(a, 2, function(z) !any(is.na(z)))] 
    a c 
1 1 3 
2 2 4 

पंक्ति 1 स्तंभ 2.

2
a <- data.frame(a=c(1,2,0,1),b=c(NA,1,NA,1), c=c(3,4,5,1)) 

na.omit(a) 
    a b c 
2 2 1 4 
4 1 1 1 

a[rowSums(is.na(a))==0,] 
    a b c 
2 2 1 4 
4 1 1 1 

a[complete.cases(a),] 
    a b c 
2 2 1 4 
4 1 1 1 
+3

मुझे यह जवाब नहीं समझा। यह हमेशा केवल एक पंक्ति –

+1

वापस आ जाएगा, धन्यवाद, धन्यवाद –

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