studio - seleccionar columnas en r
Suma de filas basadas en el valor de la columna (4)
Una solución data.table
para la eficiencia de la memoria y la elegancia de la codificación.
library(data.table)
DT <- data.table(df)
DT[, lapply(.SD, sum), by = X1]
.SD
es el subconjunto de data.table para cada grupo definido por los valores de X1
. Hay 3 viñetas útiles asociadas con el paquete data.table
.
Quiero sumar filas que tienen el mismo valor en una columna:
> df <- data.frame("1"=c("a","b","a","c","c"), "2"=c(1,5,3,6,2), "3"=c(3,3,4,5,2))
> df
X1 X2 X3
1 a 1 3
2 b 5 3
3 a 3 4
4 c 6 5
5 c 2 2
Para una columna (X2), los datos se pueden agregar para obtener las sumas de todas las filas que tienen el mismo valor de X1:
> ddply(df, .(X1), summarise, X2=sum(X2))
X1 X2
1 a 4
2 b 5
3 c 8
¿Cómo hago lo mismo para X3 y un número arbitrario de otras columnas excepto X1?
Este es el resultado que quiero:
X1 X2 X3
1 a 4 7
2 b 5 3
3 c 8 7
aggregate
es una gran función para este tipo de cosas:
aggregate(df[,-1],df["X1"],sum)
X1 X2 X3
1 a 4 7
2 b 5 3
3 c 8 7
Y una versión base R del método numcolwise de plyr:
aggregate(df[,sapply(df,is.numeric)],df["X1"],sum)
aggregate
puede hacer esto fácilmente con la interfaz de la fórmula:
aggregate(. ~ X1, data=df, FUN=sum)
## X1 X2 X3
## 1 a 4 7
## 2 b 5 3
## 3 c 8 7
Equivalentemente:
aggregate(cbind(X2, X3) ~ X1, data=df, FUN=sum)
ddply(df, "X1", numcolwise(sum))
vea ?numcolwise
para detalles y ejemplos.