[R] Sum every n (4) observations by group

Leonard Mada |eo@m@d@ @end|ng |rom @yon|c@eu
Mon Dec 20 12:56:13 CET 2021

Dear Miluji,

something like this could help:

sapply(tapply(x$Value, x$ID, cumsum),

     function(x) x[seq(4, length(x), by=4)] - c(0, x[head(seq(4, 
length(x), by=4), -1)]))

1.) Step 1:

Compute the cumsum for each ID:

tapply(x$Value, x$ID, cumsum)

2.) Step 2:

- iterate over the resulting list and select each 4th value;

- you can either run a diff on this or subtract directly the (n-4) sum;


- you may wish to check if the last value is a multiple of 4;

- alternative: you can do a LOCF (last observation carried forward);

Hope this code example helps.



More information about the R-help mailing list