A partir de una trama de datos, hay una manera fácil de agregar ( sum
, mean
, max
et 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 x1
y x2
del df2
marco de datos por año y mes. El siguiente código agrega la x1
variable, pero ¿también es posible agregar simultáneamente la x2
variable?
### aggregate variables by year month
df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE)
head(df2)
Cualquier sugerencia sería muy apreciada.
recast
función (también dereshape2
) integra la funciónmelt
ydcast
de una vez para tareas como esta:recast(df1, year + month ~ variable, sum, id.var = c("date", "year", "month"))
Sí, en su
formula
, puedecbind
agregar las variables numéricas:Ver
?aggregate
, elformula
argumento y los ejemplos.fuente
.
en el LHS.aggregate(. ~ year + month, df1, sum, na.rm = TRUE)
. Sinsum
embargo , en este ejemplo, "fecha" no tiene sentido ...Usar el
data.table
paquete, 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
dplyr
paquete, puede utilizarsummarise_all
,summarise_at
osummarise_if
funciones 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_each
está en desuso a favor desummarise_all
,summarise_at
ysummarise_if
.Como se mencionó en mi comentario anterior , también puede usar la
recast
función delreshape2
paquete:lo que te dará el mismo resultado.
fuente
Curiosamente,
aggregate
eldata.frame
mé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.frame
comox
ylist
(data.frame
tambié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
devel
versión dedplyr
(version -‘0.8.99.9000’
), también podemos usarsummarise
para aplicar la función en varias columnas conacross
fuente
Para un enfoque más flexible y rápido para la agregación de datos, consulte la
collap
función en el paquete colapsar R disponible en CRAN:Nota : Puede usar funciones básicas como
mean, max
etc. concollap
, perofmean, fmax
etc. 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 :
collap
también admite la agregación de datos multitipo flexible, lo que, por supuesto, puede hacer usando elcustom
argumento, 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
describe
no hace nada por grupo ...describe.by(column, group = grouped_column)