如何通过合并链接日期并获取相关的计算字段?

时间:2017-03-30 03:31:57

标签: r reshape

假设我有4位客户(ID - 1,2,3,4) 我有两个表中的数据:

Table 1 - lists down the dates of Purchase of A( only once a year)
ID     Date of Purchase 
1       10-03-2014
2       15-05-2014  
3       13-09-2014
4       15-10-2015

Table 2 - lists down dates of purchase of B( can be multiple times )
ID     Date of Purchase 
1       10-01-2014
1       15-05-2014  
1       15-10-2014
2       13-06-2014
2       15-10-2015
3       23-11-2014 
4       22-09-2016

我需要的是一张表:

条件

的客户的日期差异(从购买B购买A)
  1. B的购买日期应>然后购买日期为

  2. 日期的差异应该是首次购买B(购买A后制作)

  3. ID 1的示例 - 1.购买A是在第3个月。并且在第3个月之后第一次购买B是在第5个月,因此差异是2个月(或等效天数)

    ID 2的示例 - 购买A是在第5个月,第一次购买B是在第6个月,因此差异是1个月(或等效天数)

    Table3 
    ID   Difference days 
    1      60
    2      30 
    

    我如何在R中获得?

1 个答案:

答案 0 :(得分:1)

你可以使用这种方法:

tab1 <- data.frame(ID= c(1,2,3,4),  Date_of_Purchase = as.Date( c("10-03-2014","15-05-2014","13-09-2014","15-10-2015"), format = "%d-%m-%Y"))
tab2 <- data.frame(ID= c(1,1,1,2,2,3,4),  Date_of_Purchase = as.Date( c("10-01-2014","15-05-2014 ","15-10-2014","13-06-2014","15-05-2014 ","15-10-2014","13-06-2014"), format = "%d-%m-%Y"))
library("dplyr")    
tab <- tab1 %>% left_join(tab2, c("ID" = "ID"))
tab$dif <- tab$Date_of_Purchase.y- tab$Date_of_Purchase.x 

然后按ID分组并选择min

tab <- filter(tab, dif > 0)
tab3 <-   tab %>%
  dplyr::group_by(ID) %>%
  dplyr::summarise(min = min(dif))

结果:

     ID      min
  <dbl>   <time>
1     1  66 days
2     2  29 days
3     3  71 days
4     4 343 days