我有大量客户的不同产品的数据列表开始日期和结束日期。针对不同产品的间隔可以购买者之间的重叠或有时间差距:计算重叠日期的活动日期/月份
library(lubridate)
library(Hmisc)
library(dplyr)
user_id <- c(rep(12, 8), rep(33, 5))
start_date <- dmy(Cs(31/10/2010, 18/12/2010, 31/10/2011, 18/12/2011, 27/03/2014, 18/12/2014, 27/03/2015, 18/12/2016, 01/07/1992, 20/08/1993, 28/10/1999, 31/01/2006, 26/08/2016))
end_date <- dmy(Cs(31/10/2011, 18/12/2011, 28/04/2014, 18/12/2014, 27/03/2015, 18/12/2016, 27/03/2016, 18/12/2017,
01/07/2016, 16/08/2016, 15/11/2012, 28/02/2006, 26/01/2017))
data <- data.frame(user_id, start_date, end_date)
data
user_id start_date end_date
1 12 2010-10-31 2011-10-31
2 12 2010-12-18 2011-12-18
3 12 2011-10-31 2014-04-28
4 12 2011-12-18 2014-12-18
5 12 2014-03-27 2015-03-27
6 12 2014-12-18 2016-12-18
7 12 2015-03-27 2016-03-27
8 12 2016-12-18 2017-12-18
9 33 1992-07-01 2016-07-01
10 33 1993-08-20 2016-08-16
11 33 1999-10-28 2012-11-15
12 33 2006-01-31 2006-02-28
13 33 2016-08-26 2017-01-26
我想计算,在此期间,他/她所持有的任何产品的活跃天或数月的总数。
它不会是一个问题,如果产品始终重叠的话,我可以简单地采取
data %>%
group_by(user_id) %>%
dplyr::summarize(time_diff = max(end_date) - min(start_date))
然而,正如你可以在用户33看,产品不总是重叠和他们的间隔有分开添加到所有“重叠”间隔。
有没有一个快速和优雅的方式来编码它,希望在dplyr
?
谢谢@J_F为我的代码添加适当的包! –
我没有看到product_id。如果每条生产线都包含不同的产品,那么在您的具体示例中,客户将没有时间持有所有产品。或者我误解了你? – Edwin
嗨@Edwin,也许我在这里的产品类型是无关紧要的,我只是想计算用户持有任何产品时的活跃天数总数。我会编辑我的帖子,可能我的措辞有点误导! –