2016-06-18 4 views
1

Ich versuche, einen gruppierten Datensatz mit summerise_each zu vereinheitlichen. Irgendwie ist es nicht möglich, die Gruppierungsvariable vor dem Zusammenfassen zu löschen (Ich habe es mit dplyr::select versucht). Das Problem ist, dass die Gruppierungsvariable nicht numerisch ist und ich die Summe aller Spalten möchte.Verwenden Sie summarise_each auf gruppierte Daten

library(dplyr) 
group <- sample(c("a","b","c"), 100, replace = TRUE,) 
values <- matrix(rnorm(1000), ncol = 10) 
data <- data.frame(group, values) 

data %>% group_by(group) %>% summarise_each(sum) 

Fehler in UseMethod ("as.lazy_dots"): keine anwendbare Methode für 'as.lazy_dots' auf ein Objekt der Klasse angewendet "Funktion"

ich diesen Ausgang wollen, aber für alle Spalten.

data %>% group_by(group) %>% summarise(sum(X1))´ 

group sum(X1) 
    (fctr) (dbl) 
1  a 2.648381 
2  b 5.532697 
3  c 1.382693 

Ich will nicht summarise(sum(X2), sum(X2), ...)

Antwort

2

Wir innen funs

die Funktion verwenden müssen, verwenden
data %>% 
    group_by(group) %>% 
    summarise_each(funs(sum)) 

# group   X1  X2   X3  X4   X5  X6  X7   X8  X9  X10 
# <fctr>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl> 
#1  a -1.700664 3.570311 -0.23851052 7.5914770 0.3646715 -4.547660 8.944908 0.3996188 4.4322264 3.778364 
#2  b -12.535340 2.705520 -0.03063312 3.1732708 -5.8638185 -8.070278 -3.548260 -1.7781691 0.7202883 -2.634258 
#3  c 9.925093 -7.477544 -0.27394536 0.8187566 -7.7432485 -6.190602 -3.785092 -10.1892073 7.9212578 -2.766949 
+1

Das war einfach. Vielen Dank! – Alex

0

eine Benutzerfunktion zu bauen diese Aufgabe abzuschließen, versuchen:

summaRize <- function(x) { 
    sumfun <- function(fun, x) { 
    round(fun(as.numeric(as.character(x)), na.rm = TRUE), 2) 
    } 
    out <- data.frame(min = sumfun(min, x), 
        max = sumfun(max, x), 
        mean = sumfun(mean, x), 
        median = sumfun(median, x), 
        sd = sumfun(sd, x), 
        var = sumfun(var, x)) 
    out[, ] <- apply(out, 2, as.numeric) 
    out 
} 
sapply(unique(data$group), function(x) data[data$group == x, ], summaRize) 
Verwandte Themen