poligono para pairs librerias graficos grafico graficas graficar grafica ejemplos cuadricula animados r cumsum

para - Calcular la suma acumulada dentro de cada ID(grupo)



poligono en r (4)

Con marco de datos:

df <- data.frame(id = rep(1:3, each = 5) , hour = rep(1:5, 3) , value = sample(1:15))

Quiero agregar una columna de suma acumulativa que coincida con el id :

df id hour value csum 1 1 1 7 7 2 1 2 9 16 3 1 3 15 31 4 1 4 11 42 5 1 5 14 56 6 2 1 10 10 7 2 2 2 12 8 2 3 5 17 9 2 4 6 23 10 2 5 4 27 11 3 1 1 1 12 3 2 13 14 13 3 3 8 22 14 3 4 3 25 15 3 5 12 37

¿Cómo puedo hacer esto eficientemente? ¡Gracias!


Para agregar a las alternativas, la sintaxis de data.table es agradable:

library(data.table) DT <- data.table(df, key = "id") DT[, csum := cumsum(value), by = key(DT)]

O, de forma más compacta:

library(data.table) setDT(df)[, csum := cumsum(value), id][]

Lo anterior será:

  • Convertir el data.frame en un data.table por referencia
  • Calcule la suma acumulativa del valor agrupado por id y asigne por referencia
  • Imprimir (el último [] allí) el resultado de toda la operación

"df" ahora será una data.table con una columna "csum".


Usando dplyr ::

require(dplyr) df %>% group_by(id) %>% mutate(csum = cumsum(value))


Usando la biblioteca plyr .

library(plyr) ddply(df,.(id),transform,csum=cumsum(value))


df$csum <- ave(df$value, df$id, FUN=cumsum)