2016-02-16 4 views
6

के साथ एनएएस और मीन में आर के साथ एक कॉलम जोड़ें, मेरे पास डेटा फ्रेम है और मुझे इसमें एक और कॉलम जोड़ने की ज़रूरत है जो उस पंक्ति के सभी अन्य कॉलम में एनएएस की गिनती दिखाती है और इसका मतलब भी है गैर-एनए मान मुझे लगता है कि यह dplyr में किया जा सकता है।डीएएसआर

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

मैं एक और स्तंभ जो कि पंक्ति में NAS की संख्या और एक अन्य स्तंभ है जो सभी उस पंक्ति में गैर-एनए मूल्यों का मतलब पता चलता मायने रखता है उत्परिवर्तित करना चाहते हैं।

कृपया सहायता करें।

+1

यह आमतौर पर एक मंच नहीं है हमें आपके लिए अपना कोड लिखने के लिए कहें। आपने क्या प्रयास किया है आप 'dplyr' का उपयोग क्यों करना चाहते हैं? एफडब्ल्यूआईडब्ल्यू, यह बेस आर में आसानी से किसी भी तरह से किया जा सकता है। एक है: 'df1 $ na <- लागू करें (is.na (df1), 1, योग)' – Justin

+0

'dplyr' तरीका यहां वर्णित है: http://stackoverflow.com/questions/21818181/applying-a- कार्यक्षमता प्रत्येक-पंक्ति-के-एक-टेबल-उपयोग-dplyr –

उत्तर

9
library(dplyr) 

count_na <- function(x) sum(is.na(x)) 

df1 %>% 
    mutate(means = rowMeans(., na.rm = T), 
     count_na = apply(., 1, count_na)) 
+0

आप इस समाधान को केवल निर्वाचित कॉलम पर काम करने के लिए कैसे संशोधित करेंगे? उदाहरण के लिए बी एंड सी? – radek

+0

@radek इस पृष्ठ पर मेरा जवाब देखें –

6

आप इस कोशिश कर सकते हैं:

#Find the row mean and add it to a new column in the dataframe 
df1$Mean <- rowMeans(df1, na.rm = TRUE) 

#Find the count of NA and add it to a new column in the dataframe 
df1$CountNa <- rowSums(apply(is.na(df1), 2, as.numeric)) 
2

यहाँ उल्लेख किया है https://stackoverflow.com/a/37732069/2292993

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

df1 %>% 
    mutate(means = rowMeans(., na.rm = T), 
     count_na = rowSums(is.na(.))) 

चयनित कॉलम पर काम करने के लिए (उदाहरण के लिए यहाँ col एक और col ग के लिए है):

df1 %>% 
    mutate(means = rowMeans(., na.rm = T), 
     count_na = rowSums(is.na(select(.,one_of(c('a','c'))))))