How do I do a conditional sum which only looks between certain date criteria

前端 未结 7 467
遥遥无期
遥遥无期 2020-12-18 13:47

Say I have data that looks like

date, user, items_bought, event_number
2013-01-01, x, 2, 1
2013-01-02, x, 1, 2
2013-01-03, x, 0, 3
2013-01-04, x, 0, 4
2013-0         


        
7条回答
  •  情话喂你
    2020-12-18 14:17

    Here is a fairly simple method:

    # replicate your data, shifting the days ahead by your required window,
    # and rbind into a single data frame
    d <- do.call(rbind,lapply(0:2, function(x) transform(data,date=date+x)))
    
    # use aggregate to add it together, subsetting out "future" days
    aggregate(items_bought~date+user,subset(d,date<=max(data$date)),sum)
             date user items_bought
    1  2013-01-01    x            2
    2  2013-01-02    x            3
    3  2013-01-03    x            3
    4  2013-01-04    x            1
    5  2013-01-05    x            3
    6  2013-01-06    x            4
    7  2013-01-01    y            1
    8  2013-01-02    y            2
    9  2013-01-03    y            2
    10 2013-01-04    y            6
    11 2013-01-05    y           11
    12 2013-01-06    y           12
    

提交回复
热议问题