Cómo obtener estadísticas de resumen por grupo

Estoy tratando de obtener estadísticas de resumen múltiples en R-plus / S plus agrupadas por columna categórica en una sola toma. Encontré algunas funciones, pero todas hacen una estadística por llamada, como agregar.

data <- c(62, 60, 63, 59, 63, 67, 71, 64, 65, 66, 68, 66, 71, 67, 68, 68, 56, 62, 60, 61, 63, 64, 63, 59) grp <- factor(rep(LETTERS[1:4], c(4,6,6,8))) df <- data.frame(group=grp, dt=data) mg <- aggregate(df$dt, by=df$group, FUN=mean) mg <- aggregate(df$dt, by=df$group, FUN=sum) 

Lo que estoy buscando es obtener estadísticas múltiples para el mismo grupo como mean, min, max, std, … etc en una sola llamada, ¿es eso factible?

Pondré mis dos centavos por tapply() .

 tapply(df$dt, df$group, summary) 

Puede escribir una función personalizada con las estadísticas específicas que desea reemplazar el resumen.

El paquete dplyr podría ser una buena alternativa a este problema:

 library('dplyr') df %>% group_by(group) %>% summarize(mean=mean(dt), sum=sum(dt)) 

Usando el paquete Purrr de Hadley Wickham, esto es bastante simple. Use split para dividir el data_frame pasado en grupos, luego use map para aplicar la función de summary a cada grupo.

 library(purrr) df %>% split(.$group) %>% map(summary) 

Hay muchas formas diferentes de hacerlo, pero me gustaría describeBy en el paquete de psych :

 describeBy(df$dt, df$group, mat = TRUE) 

eche un vistazo al paquete plyr . Específicamente, ddply

 ddply(df, .(group), summarise, mean=mean(dt), sum=sum(dt)) 

Además de describeBy , el paquete doBy es otra opción. Proporciona gran parte de la funcionalidad del RESUMEN SAS PROC. Detalles: http://www.statmethods.net/stats/descriptives.html

Acabo de encontrar un maravilloso R tablas de paquetes. Puede tabular datos por tantas categorías como desee y calcular múltiples estadísticas para múltiples variables: ¡realmente es increíble!

¡Pero espera hay mas! El paquete tiene funciones para generar código LaTeX para sus tablas para una fácil importación a sus documentos.

después de 5 largos años, estoy seguro de que no se recibirá mucha atención por esta respuesta, pero aún para completar todas las opciones, aquí está el que tiene data.table

 library(data.table) setDT(df)[ , list(mean_gr = mean(dt), sum_gr = sum(dt)) , by = .(group)] # group mean_gr sum_gr #1: A 61 244 #2: B 66 396 #3: C 68 408 #4: D 61 488 

Primero, depende de su versión de R. Si pasó el 2.11, puede usar agregar varias funciones de resultados (resumen, por ejemplo, o su propia función). Si no, puedes usar la respuesta hecha por Justin.