A partir de una trama de datos, hay una manera fácil de agregar ( sum, mean, maxet c) múltiples variables simultáneamente?
A continuación se presentan algunos datos de muestra:
library(lubridate)
days = 365*2
date = seq(as.Date("2000-01-01"), length = days, by = "day")
year = year(date)
month = month(date)
x1 = cumsum(rnorm(days, 0.05))
x2 = cumsum(rnorm(days, 0.05))
df1 = data.frame(date, year, month, x1, x2)
Me gustaría agregar simultáneamente las variables x1y x2del df2marco de datos por año y mes. El siguiente código agrega la x1variable, pero ¿también es posible agregar simultáneamente la x2variable?
### aggregate variables by year month
df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE)
head(df2)
Cualquier sugerencia sería muy apreciada.

recastfunción (también dereshape2) integra la funciónmeltydcastde una vez para tareas como esta:recast(df1, year + month ~ variable, sum, id.var = c("date", "year", "month"))Sí, en su
formula, puedecbindagregar las variables numéricas:Ver
?aggregate, elformulaargumento y los ejemplos.fuente
.en el LHS.aggregate(. ~ year + month, df1, sum, na.rm = TRUE). Sinsumembargo , en este ejemplo, "fecha" no tiene sentido ...Usar el
data.tablepaquete, que es rápido (útil para conjuntos de datos más grandes)https://github.com/Rdatatable/data.table/wiki
Usando el paquete plyr
Usando summaryize () del paquete Hmisc (los encabezados de columna son desordenados en mi ejemplo)
fuente
dt[, .(x1.sum = sum(x1), x2.sum = sum(x2), by = c(year, month):?Con el
dplyrpaquete, puede utilizarsummarise_all,summarise_atosummarise_iffunciones para agregar múltiples variables simultáneamente. Para el conjunto de datos de ejemplo, puede hacer esto de la siguiente manera:El resultado de las dos últimas opciones:
Nota:
summarise_eachestá en desuso a favor desummarise_all,summarise_atysummarise_if.Como se mencionó en mi comentario anterior , también puede usar la
recastfunción delreshape2paquete:lo que te dará el mismo resultado.
fuente
Curiosamente,
aggregateeldata.framemétodo de la base R no se muestra aquí, por encima de la interfaz de fórmula se utiliza, por lo que para completar:Uso más genérico del método de data.frame del agregado:
Ya que estamos proporcionando un
data.framecomoxylist(data.frametambién es alist) comoby, esto es muy útil si necesitamos usarlo de manera dinámica, por ejemplo, usar otras columnas para agregar y agregar es muy simplePor ejemplo así:
fuente
Con la
develversión dedplyr(version -‘0.8.99.9000’), también podemos usarsummarisepara aplicar la función en varias columnas conacrossfuente
Para un enfoque más flexible y rápido para la agregación de datos, consulte la
collapfunción en el paquete colapsar R disponible en CRAN:Nota : Puede usar funciones básicas como
mean, maxetc. concollap, perofmean, fmaxetc. son funciones agrupadas basadas en C ++ que se ofrecen en el paquete de contracción y que son significativamente más rápidas (es decir, el rendimiento en grandes agregaciones de datos es el mismo que data.table mientras proporciona una mayor flexibilidad, y estas funciones agrupadas rápidas también se pueden usar sincollap).Nota 2 :
collaptambién admite la agregación de datos multitipo flexible, lo que, por supuesto, puede hacer usando elcustomargumento, pero también puede aplicar funciones a columnas numéricas y no numéricas de forma semiautomatizada:fuente
Llegó tarde a la fiesta, pero recientemente encontró otra forma de obtener las estadísticas resumidas.
library(psych) describe(data)Salida: media, min, max, desviación estándar, n, error estándar, curtosis, asimetría, mediana y rango para cada variable.
fuente
describeno hace nada por grupo ...describe.by(column, group = grouped_column)