2015-06-25 3 views
6

मैं एक डेटा फ्रेम md है:dplyr: NAS के साथ काम कर group_by वस्तु पर मतलब (summarize_each) की गणना करते समय

md <- data.frame(x = c(3,5,4,5,3,5), y = c(5,5,5,4,4,1), z = c(1,3,4,3,5,5), 
     device1 = c("c","a","a","b","c","c"), device2 = c("B","A","A","A","B","B")) 
md[2,3] <- NA 
md[4,1] <- NA 
md 

मैं dplyr का उपयोग कर DEVICE1/DEVICE2 संयोजनों द्वारा साधन गणना करना चाहते हैं:

library(dplyr) 
md %>% group_by(device1, device2) %>% summarise_each(funs(mean)) 

हालांकि, मुझे कुछ एनएएस मिल रहे हैं। मैं चाहता हूं कि एनएएस को अनदेखा किया जाए (na.rm = TRUE) - मैंने कोशिश की, लेकिन फ़ंक्शन इस तर्क को स्वीकार नहीं करना चाहता। इन दोनों लाइनों त्रुटि हो: कि के रूप में

md %>% group_by(device1, device2) %>% summarise_each(funs(mean), na.rm = TRUE) 
md %>% group_by(device1, device2) %>% summarise_each(funs(mean, na.rm = TRUE)) 
+2

आपको 'मज़ेदार (माध्य = माध्य (।, Na.rm = TRUE)) ' – akrun

उत्तर

9

कोशिश:

library(dplyr) 
md %>% group_by(device1, device2) %>% 
     summarise_each(funs(mean(., na.rm = TRUE))) 
9

अन्य उत्तर आप summarize/_each में mean(., na.rm = TRUE) पारित करने के लिए वाक्य रचना दिखाया।

व्यक्तिगत रूप से, मैं इतनी बार (मेरी .Rprofile में जैसे) इस समस्या से निपटने और यह बहुत कष्टप्रद है कि मैं सिर्फ NA-अवगत बुनियादी कार्यों के निम्नलिखित सेट को परिभाषित है, ऐसा है कि आप summarize(mean_) और साथ dplyr के साथ उन्हें लागू कर सकते हैं कोई परेशान बहस नहीं;

mean_ <- function(...) mean(..., na.rm=T) 
median_ <- function(...) median(..., na.rm=T) 
sum_ <- function(...) sum(..., na.rm=T) 
sd_  <- function(v) sqrt(sum((v-mean(v))^2)/length(v)) 
cor_ <- function(...) cor(..., use='pairwise.complete.obs') 
table_ <- function(...) table(..., useNA='ifany') 
mode_ <- function(...) { 
    tab <- table(...) 
    names(tab[tab==max(tab)]) # the '==' implicitly excludes NA values 
} 
clamp_ <- function(..., minval=0, maxval=70) pmax(minval, pmin(maxval,...)) 

वास्तव में आप एक बार और सभी के लिए एक वैश्विक स्विच झटका करने के लिए, na.action/na.pass/na.omit/na.fail तरह डिफ़ॉल्ट व्यवहार क्या करने के लिए के रूप में कार्य बताने के लिए सक्षम होना चाहते हैं: भी स्रोत-कोड क्लीनर और अधिक पठनीय है, जो एक और मजबूत प्लस रहता है करते हैं, और त्रुटियों को फेंक नहीं देते हैं या असंगत होते हैं, जैसा कि वे वर्तमान में विभिन्न पैकेजों में करते हैं।

प्रति-फ़ंक्शन डिफ़ॉल्ट सेट करने के लिए Defaults नामक एक CRAN पैकेज होता था, लेकिन यह 2014 से पूर्व-3.x के बाद से बनाए रखा नहीं जाता है। इसके बारे में अधिक जानकारी के लिए Setting Function Defaults R on a Project Specific Basis

+1

की आवश्यकता हो सकती है, मैं वास्तव में डाउनवॉटर पर ऑब्जेक्ट करता हूं, यह एक ऐसा समाधान है जिसने मुझे कई वर्षों का दर्द लिया ; यह कॉम्पैक्ट, पठनीय, सुरुचिपूर्ण है, और आप अभी भी '...' passthrough args के साथ डिफ़ॉल्ट को ओवरराइड कर सकते हैं। यदि एकमात्र आपत्ति नामकरण सम्मेलन है, तो पहले से ही बेहतर एक प्रस्ताव दें। – smci

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