Posterior a de nuestra extensa recopilación de datos solucionamos esta obstáculo que suelen tener ciertos los usuarios. Te brindamos la respuesta y esperamos servirte de gran ayuda.
Solución:
ESTÁ BIEN. Suponiendo que sus datos están en un marco de datos llamado foo
:
> head(foo)
date mcode mname ycode yname yissue bsent breturn tsent
417572 2010/07/28 45740 ENDPOINT A 5772 XMAG 20100800 7 0 7
417573 2010/07/31 45740 ENDPOINT A 5772 XMAG 20100800 0 0 0
417574 2010/08/04 45740 ENDPOINT A 5772 XMAG 20100800 0 0 0
417575 2010/08/14 45740 ENDPOINT A 5772 XMAG 20100800 0 0 0
417576 2010/08/26 45740 ENDPOINT A 5772 XMAG 20100800 0 4 0
417577 2010/07/28 45741 ENDPOINT L 5772 XMAG 20100800 2 0 2
treturn csales
417572 0 0
417573 0 1
417574 0 1
417575 0 1
417576 0 0
417577 0 0
Entonces esto hará la agregación de las columnas numéricas en sus datos:
> aggregate(cbind(bsent, breturn, tsent, treturn, csales) ~ yname, data = foo,
+ FUN = sum)
yname bsent breturn tsent treturn csales
1 XMAG 14 8 14 0 6
2 YMAG 11 6 11 6 5
Eso fue usando el fragmento de datos que incluyó en su Q. Usé la interfaz de fórmula para aggregate()
que es un poco mejor en este caso porque no necesita todo el foo$
bits en los nombres de las variables que desea agregar. Si le faltan datos (NA
) en su conjunto de datos completo, entonces necesitará agregar un argumento adicional na.rm = TRUE
que pasará a sum()
al igual que:
> aggregate(cbind(bsent, breturn, tsent, treturn, csales) ~ yname, data = foo,
+ FUN = sum, na.rm = TRUE)
O el plyr
biblioteca, que es fácilmente extensible a otras clases de datos:
> library(plyr)
> result.2 <- ddply(df$a, .(df$b), sum)
> result.2
df.b V1
1 down 30
2 up 25
También puedes usar xtabs
o tapply
:
xtabs(cbind(bsent, breturn, tsent, treturn, csales) ~ yname, data)
tapply(data$bsent, data$yname, sum)