calculating sum of previous 3 rows in R data.table (by grid-square)

前端 未结 6 1447
一生所求
一生所求 2020-12-03 23:32

I would like to calculate the rainfall that has fallen over the last three days for each grid square, and add this as a new column in my data.table. To be clear, I want to s

6条回答
  •  死守一世寂寞
    2020-12-04 00:08

    Late to the party, but a more recent version of data.table package (1.12.8 for me) has frollsum function that will accomplish this a bit more cleanly than earlier (but very much valid) answers:

    library (data.table)
    
    # making the data.table
    rain           <- c(NA, NA, NA, 0, 0, 5, 1, 0, 3, 10)  # rainfall values to work with
    square         <- c(1,1,1,1,1,1,1,1,1,2)               # the geographic grid square for the rainfall measurement
    desired_result <- c(NA, NA, NA, NA, NA, 5, 6, 6, 4, NA )  # this is the result I'm looking for (the last NA as we are now on to the first day of the second grid square)
    weather <- data.table(rain, square, desired_result)  # making the data.table
    
    # using `frollsum`
    weather[, rain3 := frollsum(rain, n = 3), by = square][]
    #>     rain square desired_result rain3
    #>  1:   NA      1             NA    NA
    #>  2:   NA      1             NA    NA
    #>  3:   NA      1             NA    NA
    #>  4:    0      1             NA    NA
    #>  5:    0      1             NA    NA
    #>  6:    5      1              5     5
    #>  7:    1      1              6     6
    #>  8:    0      1              6     6
    #>  9:    3      1              4     4
    #> 10:   10      2             NA    NA
    

    Created on 2020-07-09 by the reprex package (v0.3.0)

提交回复
热议问题