multiple data columns r aggregate

data - Agregue varias columnas a la vez



r aggregate multiple columns (2)

Esta pregunta ya tiene una respuesta aquí:

Tengo un marco de datos likeso:

x <- id1 id2 val1 val2 val3 val4 1 a x 1 9 2 a x 2 4 3 a y 3 5 4 a y 4 9 5 b x 1 7 6 b y 4 4 7 b x 3 9 8 b y 2 8

Deseo agregar lo anterior por id1 e id2. Quiero poder obtener los medios para val1, val2, val3, val4 al mismo tiempo.

¿Cómo hago esto?

Esto es lo que tengo actualmente, pero funciona solo para 1 columna:

agg <- aggregate(x$val1, list(id11 = x$id1, id2= x$id2), mean) names(agg)[3] <- c("val1") # Rename the column

Además, ¿cómo cambio el nombre de las columnas que se muestran como medios en la misma declaración dada anteriormente


Podemos usar el método de fórmula de aggregate . Las variables en los ''rhs'' de ~ son las variables de agrupación mientras que . representa todas las demás variables en el ''df1'' (del ejemplo, suponemos que necesitamos la mean para todas las columnas excepto la agrupación), especifique el conjunto de datos y la función ( mean ).

aggregate(.~id1+id2, df1, mean)

O podemos usar summarise_each de dplyr después de agrupar ( group_by )

library(dplyr) df1 %>% group_by(id1, id2) %>% summarise_each(funs(mean))

O otra opción es data.table . Convertimos ''data.frame'' a ''data.table'' ( setDT(df1) , agrupados por ''id1'' e ''id2'', recorremos el subconjunto de data.table ( .SD ) y obtenemos la mean .

library(data.table) setDT(df1)[, lapply(.SD, mean), by = .(id1, id2)]

datos

df1 <- structure(list(id1 = c("a", "a", "a", "a", "b", "b", "b", "b" ), id2 = c("x", "x", "y", "y", "x", "y", "x", "y"), val1 = c(1L, 2L, 3L, 4L, 1L, 4L, 3L, 2L), val2 = c(9L, 4L, 5L, 9L, 7L, 4L, 9L, 8L)), .Names = c("id1", "id2", "val1", "val2"), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6", "7", "8"))


Tu podrías intentar:

agg <- aggregate(list(x$val1, x$val2, x$val3, x$val4), by = list(x$id1, x$id2), mean)