Extracting event types from last 21 day window

后端 未结 2 1815
迷失自我
迷失自我 2021-01-20 22:01

My dataframe looks like this. The two rightmost columns are my desired columns.

**Name      ActivityType     ActivityDate   Email(last 21 says)  Webinar(last         


        
2条回答
  •  借酒劲吻你
    2021-01-20 22:35

    Here's a possible data.table solution. Here I'm creating 2 temporary data sets- one for Sale and one for the rest of activity types and then joining between them by a rolling window of 21 while using by = .EACHI in order to check conditions in each join. Then, I'm joining the result to the original data set.

    Convert the date column to Date class and key the data by Name and Date (for the final/rolling join)

    library(data.table)
    setkey(setDT(df)[, ActivityDate := as.IDate(ActivityDate, "%m/%d/%Y")], Name, ActivityDate)
    

    Create 2 temporary data sets per each activity

    Saletemp <- df[ActivityType == "Sale", .(Name, ActivityDate)]
    Elsetemp <- df[ActivityType != "Sale", .(Name, ActivityDate, ActivityType)]
    

    Join by a rolling window of 21 to the sales temporary data set while checking conditions

    Saletemp[Elsetemp, `:=`(Email21 = as.logical(which(i.ActivityType == "Email")), 
                            Webinar21 = as.logical(which(i.ActivityType == "Webinar"))), 
             roll = -21, by = .EACHI]
    

    Join everything back

    df[Saletemp, `:=`(Email21 = i.Email21, Webinar21 = i.Webinar21)]
    df
    #     Name ActivityType ActivityDate Email21 Webinar21
    #  1: John        Email   2014-01-01      NA        NA
    #  2: John      Webinar   2014-01-05      NA        NA
    #  3: John         Sale   2014-01-20    TRUE      TRUE
    #  4: John      Webinar   2014-03-25      NA        NA
    #  5: John         Sale   2014-04-01      NA      TRUE
    #  6: John         Sale   2014-07-01      NA        NA
    #  7:  Tom        Email   2015-01-01      NA        NA
    #  8:  Tom      Webinar   2015-01-05      NA        NA
    #  9:  Tom         Sale   2015-01-20    TRUE      TRUE
    # 10:  Tom      Webinar   2015-03-25      NA        NA
    # 11:  Tom         Sale   2015-04-01      NA      TRUE
    # 12:  Tom         Sale   2015-07-01      NA        NA
    

提交回复
热议问题