Agregando múltiples columnas en datos.
-
12-12-2019 - |
Pregunta
Tengo la siguiente muestra data.table
:
dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))
Me gustaría agregar todas las columnas (A y B, aunque deben mantenerse separadas) por ID utilizando colSums
, por ejemplo.¿Cuál es la forma correcta de hacer esto?Lo siguiente no funciona:
dtb[,colSums, by="id"]
Esto es solo una muestra y mi tabla tiene muchas columnas, por lo que quiero evitar especificarlos todos en el nombre de la función
Solución
Esto es en realidad lo que estaba buscando y se menciona en las preguntas frecuentes:
dtb[,lapply(.SD,mean),by="id"]
Otros consejos
Supongo que en este caso es más rápido llevar sus datos primero en el formato largo y hacer su agregación a continuación (ver comentarios de Matthew en este SO POST ):
library(data.table)
dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))
library(reshape2)
dt_long <- as.data.table(melt(dtb, id.var="id"))
dt_long[, sum(value), by=c("id","variable")]
id variable V1
1: 1 a 601
2: 2 a 440
3: 3 a 496
4: 4 a 553
5: 5 a 444
6: 6 a 466
7: 7 a 525
8: 8 a 553
9: 9 a 541
...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow