ओम की पंक्तियाँ जिनमें NA का विशिष्ट स्तंभ है


129

मैं जानना चाहता हूं कि NAडेटा फ्रेम में मूल्यों को कैसे छोड़ा जाए , लेकिन केवल कुछ कॉलमों में मेरी दिलचस्पी है।

उदाहरण के लिए,

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))

लेकिन मैं केवल छोड़ डेटा जहां चाहते yहै NA, इसलिए परिणाम होना चाहिए

  x  y  z
1 1  0 NA
2 2 10 33

na.omitलगता है सभी पंक्तियों को हटा दें जिसमें कोई भी हो NA

क्या कोई मुझे इस सरल प्रश्न से बाहर निकालने में मदद कर सकता है?

लेकिन अगर अब मैं इस सवाल को बदल दूं:

DF <- data.frame(x = c(1, 2, 3,NA), y = c(1,0, 10, NA), z=c(43,NA, 33, NA))

अगर मैं केवल x=naया तो छोड़ना चाहता हूं, तो मैं फ़ंक्शन को कहां z=naरख सकता हूं |?

जवाबों:


79

आप complete.casesफ़ंक्शन का उपयोग कर सकते हैं और इसे फ़ंक्शन में डाल सकते हैं:

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))

completeFun <- function(data, desiredCols) {
  completeVec <- complete.cases(data[, desiredCols])
  return(data[completeVec, ])
}

completeFun(DF, "y")
#   x  y  z
# 1 1  0 NA
# 2 2 10 33

completeFun(DF, c("y", "z"))
#   x  y  z
# 2 2 10 33

संपादित करें: केवल बिना NAएस वाली पंक्तियाँ लौटाएँ

यदि आप NAकिसी भी कॉलम में कम से कम एक के साथ सभी पंक्तियों को खत्म करना चाहते हैं , तो complete.casesसीधे फ़ंक्शन का उपयोग करें :

DF[complete.cases(DF), ]
#   x  y  z
# 2 2 10 33

या अगर completeFunआपके वर्कफ़्लो में पहले से ही बाधा है;)

completeFun(DF, names(DF))

क्या आप अपने दृष्टिकोण को लालची बना सकते हैं? उन सभी स्तंभों को लें जिनमें NA नहीं है।
लेओ लेपोल्ड हर्ट्ज़ o

1
आपका मतलब है कि बिना एस वाली पंक्तियों को वापस करें NA? पसंद है completeFun(DF, names(DF))?
बेनरनेस

सही बात! कृपया, इसे अपने उत्तर में जोड़ने पर विचार करें क्योंकि यह यहाँ एक सामान्य आवश्यकता है। - - मुझे लगता है कि मेल के जवाब को आपके अनुसार विस्तारित नहीं किया जा सकता है। आपका फ़ंक्शन दृष्टिकोण बहुत अच्छा है!
लेओ लेपोल्ड हर्ट्ज़ '

1
किया हुआ! टिप के लिए Thx @ LéoLéopoldHertz ar
BenBarnes

192

उपयोग is.na

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
DF[!is.na(DF$y),]

1
आप डेटा सेट में सभी कॉलमों पर लालच से इस दृष्टिकोण को कैसे लागू करते हैं? यदि कोई स्तंभ मान NA स्किप है। तो आपका डेटा सेट आउटपुट केवल दूसरा कॉलम है।
लेओ लेपोल्ड हर्ट्ज़ '

2
na.omitकिसी भी कॉलम में NA के साथ सभी पंक्तियों को लालच से हटाने के लिए उपयोग करेंna.omit(DF)
एम वाइकिंग

69

हैडली का tidyrयह अद्भुत समारोह हैdrop_na

library(tidyr)
DF %>% drop_na(y)
  x  y  z
1 1  0 NA
2 2 10 33

30

'सब्मिट' का उपयोग करें

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
subset(DF, !is.na(y))

9

यह उपयोग करना संभव है na.omitके लिए data.table:

na.omit(data, cols = c("x", "z"))

3
cols=तर्क में उपलब्ध है data.table::na.omitपुस्तकालय। आधार नहीं stats::na.omit
एम। वाइकिंग

3

इसे इस्तेमाल करे:

cc=is.na(DF$y)
m=which(cc==c("TRUE"))
DF=DF[-m,]


1

बस यह प्रयास करें:

DF %>% t %>% na.omit %>% t

यह डेटा फ़्रेम को स्थानांतरित करता है और नल पंक्तियों को छोड़ देता है जो ट्रांसपोज़ेशन से पहले 'कॉलम' थे और फिर आप इसे वापस ट्रांसफर करते हैं।


8
कृपया थोड़ा समझाएं कि क्या चल रहा है।
वॉनब्रांड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.