2015-06-25 4 views
6

Ich habe einen Datenrahmen md:dplyr: mit NAs zu tun, während mittlere Berechnung (summarize_each) auf group_by Objekt

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 

Ich mag Mittel device1/device2 Kombinationen berechnen dplyr mit:

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

Allerdings bekomme ich einige NAs. Ich will die NAs ignoriert werden (na.rm = TRUE) - Ich habe versucht, aber die Funktion will dieses Argument nicht akzeptieren. Beide Linien führen Fehler:

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

Sie brauchen 'Spaß (mean = mean (., Na.rm = TRUE))' – akrun

Antwort

6

So einfach ist das:

funs(mean(., na.rm = TRUE)) 
9

Versuch:

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

Die anderen Antworten zeigten die Syntax für mean(., na.rm = TRUE) in summarize/_each vorbei.

Ich persönlich behandeln diese mit so oft und es ist so ärgerlich, dass ich nur den folgenden Satz von NA-aware Basisfunktionen definieren (zB in meinem .Rprofile), so dass Sie sie mit dplyr mit summarize(mean_) anwenden können und kein lästiges Arg-Passing; hält auch die Quelle-Code sauberer und besser lesbar, die ein weiteres starkes Plus ist:

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,...)) 

Wirklich Sie einen globalen Schalter Flick einmal in der Lage sein wollen, und für alle, wie na.action/na.pass/na.omit/na.fail Funktionen als Standardverhalten zu sagen, was zu tun, und werfen keine Fehler oder inkonsistent, wie sie es derzeit tun, über verschiedene Pakete.

Früher gab es ein CRAN-Paket mit dem Namen Defaults zum Festlegen von Standardwerten pro Funktion, aber seit 2014, pre-3.x, wird es nicht beibehalten. Für mehr darüber Setting Function Defaults R on a Project Specific Basis

+1

Ich habe wirklich Einwände gegen die Downvoters, das ist eine Lösung, die mich mehrere Jahre Schmerzen zu kommen ; es ist kompakt, lesbar, elegant, und Sie können die Standardeinstellungen immer noch mit den Passthrough-Args umgehen. Wenn der einzige Einwand die Namenskonvention ist, schlagen Sie schon eine bessere vor. – smci

Verwandte Themen