Calculate cumulative sum (cumsum) by group

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

ave is the “go-to” function if you want a by-group vector of equal length to an existing vector and it can be computed from those sub vectors alone. If you need by-group processing based on multiple “parallel” values, the base strategy is do.call(rbind, by(dfrm, grp, FUN)).

Leave a Comment