Estoy tratando de obtener la suma acumulada de una variable (v) para grupos ("a" y "b") dentro de un marco de datos. ¿Cómo puedo obtener el resultado en la parte inferior, cuyas filas están incluso numeradas correctamente, en la columna cs de mi marco de datos?Aplicar una función a grupos dentro de un data.frame en R
> library(nlme)
> g <- factor(c("a","b","a","b","a","b","a","b","a","b","a","b"))
> v <- c(1,4,1,4,1,4,2,8,2,8,2,8)
> cs <- rep(0,12)
> d <- data.frame(g,v,cs)
> d
g v cs
1 a 1 0
2 b 4 0
3 a 1 0
4 b 4 0
5 a 1 0
6 b 4 0
7 a 2 0
8 b 8 0
9 a 2 0
10 b 8 0
11 a 2 0
12 b 8 0
> r=gapply(d,FUN="cumsum",form=~g, which="v")
>r
$a
v
1 1
3 2
5 3
7 5
9 7
11 9
$b
v
2 4
4 8
6 12
8 20
10 28
12 36
> str(r)
List of 2
$ a:'data.frame': 6 obs. of 1 variable:
..$ v: num [1:6] 1 2 3 5 7 9
$ b:'data.frame': 6 obs. of 1 variable:
..$ v: num [1:6] 4 8 12 20 28 36
supongo que podría buscar la manera laboriosa para obtener los datos de esas tramas de datos en d $ cs, pero no tiene que haber algún truco fácil que me falta.
Siempre me olvido de 'ave'; aunque es lo mismo que vienen los otros 2? –
@TylerRinker: es esencialmente lo mismo que la solución de Martin (ver mi edición). –
Estaba confundido b/c comparado con el de joran. Olvidé que plyr reorganiza las cosas. +1 –