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

¿Fue útil?

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
scroll top