R // Sum by based on date range

后端 未结 1 896
無奈伤痛
無奈伤痛 2020-12-06 23:50

Lets say I have a data frame as follows (only the first 3 columns), in which sum is for example the revenue generated by customer user on d

相关标签:
1条回答
  • 2020-12-07 00:28

    using data.table you can levearge keys:

    library(data.table)
    DT <- data.table(<yourdata>)
    setkey(DT, user, date)
    
    DT[, sumSum := DT[ .(.BY[[1]], .d+(-5:-1) )][, sum(sum, na.rm=TRUE)] , by=list(user, .d=date)]
    DT
    #      user       date sum sum.previous5days. sumSum
    #   1:    A 2013-01-01  10                  0      0
    #   2:    A 2013-01-02  20                 10     10
    #   3:    A 2013-01-03  10                 30     30
    #   4:    A 2013-01-05   5                 40     40
    #   5:    A 2013-01-06   6                 45     45
    #   6:    A 2013-01-08   7                 21     21
    #   7:    A 2013-01-09   4                 22     18   <~~~ Discrepency
    #   8:    A 2013-01-10   0                 22     22
    #   9:    B 2013-01-06   1                  0      0
    #  10:    B 2013-01-07   1                  1      1
    
    0 讨论(0)
提交回复
热议问题