2015-06-25 39 views
6

Mam MD ramka danych:dplyr: do czynienia z agencji krajowych przy obliczaniu średniej (summarize_each) na obiekcie group_by

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 

Chcę obliczyć rozumie przez device1/kombinacje device2 użyciu dplyr:

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

Jednak otrzymuję niektóre NA. Chcę, aby NAs zostały zignorowane (na.rm = TRUE) - próbowałem, ale funkcja nie chce zaakceptować tego argumentu. Obie te linie spowodować błędu:

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

Możesz potrzebować 'funs (mean = mean (., Na.rm = TRUE))' – akrun

Odpowiedz

6

Proste jak:

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

try:

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

innych odpowiedzi pokazaliśmy wam składni dla przechodzącą mean(., na.rm = TRUE) do summarize/_each.

Osobiście sobie z tym tak często i to jest tak irytujące, że po prostu zdefiniować następujący zestaw NA-świadomych podstawowych funkcji (np w moim .Rprofile), tak że można je stosować z dplyr z summarize(mean_) i bez brzydkiego przekazywania zdań; również utrzymuje czyszczenia kodu źródłowego i bardziej czytelne, co jest kolejnym mocnym Plus:

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

Naprawdę chcesz być w stanie potrząsnąć jeden przełącznik globalny raz na zawsze, jak na.action/na.pass/na.omit/na.fail powiedzieć funkcje jako domyślne zachowanie co do robić, a nie rzucać błędów lub być niekonsekwentne, tak jak obecnie, w różnych pakietach.

Wcześniej używany był pakiet CRAN o nazwie Defaults do ustawiania wartości domyślnych dla funkcji, ale nie jest on utrzymywany od 2014 r., Pre-3.x. Więcej informacji na ten temat: Setting Function Defaults R on a Project Specific Basis

+1

Naprawdę sprzeciwiam się spadkom, to rozwiązanie wymagało kilku lat cierpienia, aby dojść do ; Jest kompaktowy, czytelny, elegancki i wciąż można przesłonić domyślne argumenty "..." przekazujące. Jeśli jedynym zastrzeżeniem jest konwencja nazewnictwa, zaproponuj już lepszą. – smci