How to Perform Cumulative Sum in R?

How to Perform Cumulative Sum in R?

This is R code to calculate cumulative sum.

1) Data created

treatment=rep(c("Cultivar A", "Cultivar B", "Cultivar C", "Cultivar D", "Cultivar E"), each=3)
rep=rep(c("I", "II", "III"), time=5)
yield=c(10, 11, 21, 13, 23, 23, 13, 13, 5, 33, 21, 13, 42, 12, 13)
nitrogen=c(500,450,482,485,770,158,565,985,458,636,965,458,565,985,458)
dataA=data.frame(treatment, rep, yield, nitrogen)

    treatment rep yield nitrogen
1  Cultivar A   I    10      500
2  Cultivar A  II    11      450
3  Cultivar A III    21      482
4  Cultivar B   I    13      485
5  Cultivar B  II    23      770
6  Cultivar B III    23      158
7  Cultivar C   I    13      565
8  Cultivar C  II    13      985
9  Cultivar C III     5      458
10 Cultivar D   I    33      636
11 Cultivar D  II    21      965
12 Cultivar D III    13      458
13 Cultivar E   I    42      565
14 Cultivar E  II    12      985
15 Cultivar E III    13      458

2) Cumulative Sum per group

if(!require(dplyr)) install.packages("dplyr")
library(dplyr)

dataB= data.frame(dataA %>%
       group_by(treatment) %>%
       mutate(yield_accu=cumsum(yield)))

dataC= data.frame(dataB %>%
       group_by(treatment) %>%
       mutate(nitrogen_accu=cumsum(nitrogen)))

dataC
    treatment rep yield nitrogen yield_accu nitrogen_accu
1  Cultivar A   I    10      500         10           500
2  Cultivar A  II    11      450         21           950
3  Cultivar A III    21      482         42          1432
4  Cultivar B   I    13      485         13           485
5  Cultivar B  II    23      770         36          1255
6  Cultivar B III    23      158         59          1413
7  Cultivar C   I    13      565         13           565
8  Cultivar C  II    13      985         26          1550
9  Cultivar C III     5      458         31          2008
10 Cultivar D   I    33      636         33           636
11 Cultivar D  II    21      965         54          1601
12 Cultivar D III    13      458         67          2059
13 Cultivar E   I    42      565         42           565
14 Cultivar E  II    12      985         54          1550
15 Cultivar E III    13      458         67          2008

3) datacume() function

To make this process easier, I developed an R function, datacume(). For details, please read the post below.

1) Install the function

if(!require(remotes)) install.packages("remotes")
if (!requireNamespace("datacume", quietly = TRUE)) {
  remotes::install_github("agronomy4future/datacume", force= TRUE)
}
library(remotes)
library(datacume)

2) Run the code

if(!require(dplyr)) install.packages("dplyr")
library(dplyr)

dataD= datacume(
  data= dataA,
  group_vars= c("treatment"),
  time_var= rep,
  response_vars= c("yield","nitrogen"))

dataD
   treatment  rep   yield nitrogen Cumulative_yield Cumulative_nitrogen
 1 Cultivar A I        10      500               10                 500
 2 Cultivar A II       11      450               21                 950
 3 Cultivar A III      21      482               42                1432
 4 Cultivar B I        13      485               13                 485
 5 Cultivar B II       23      770               36                1255
 6 Cultivar B III      23      158               59                1413
 7 Cultivar C I        13      565               13                 565
 8 Cultivar C II       13      985               26                1550
 9 Cultivar C III       5      458               31                2008
10 Cultivar D I        33      636               33                 636
11 Cultivar D II       21      965               54                1601
12 Cultivar D III      13      458               67                2059
13 Cultivar E I        42      565               42                 565
14 Cultivar E II       12      985               54                1550
15 Cultivar E III      13      458               67                2008

Comments are closed.