我和customer_ID和date_reward有一张表,我希望得到customer_ID发送的奖励的组计数,条件是每个组将只有60天的间隔发出的奖励。如果customer_ID的两个日期之间的差异大于60,那么对于同一个customer_ID,它应该是一个单独的组。
例如,
customer_ID date_reward
CD3859 3/3/2017
CD3859 4/3/2017
CD3859 7/14/2017
CD3859 8/2/2017
CD1190 1/2/2017
CD1190 2/28/2017
CD1190 3/15/2017
CD4457 5/5/2017
CD4457 6/15/2017
CD4457 7/2/2017
CD4457 9/30/2017
CD4457 10/30/2017
CD4457 1/15/2018
CD4457 4/7/2018
如果日期间隔超过60天,则同一customer_ID的输出可能有多行。
预期输出:
customer_ID group_count
CD3859 2
CD3859 2
CD1190 3
CD4457 3
CD4457 2
CD4457 1
CD4457 1
发布于 2019-06-28 08:26:52
这是一个dplyr解决方案。这会导致customer_ID的顺序不同,我认为b/c dplyr
默认情况下对组进行排序,不确定最后是否值得重新排序。
library(dplyr)
df %>%
mutate(date_reward = as.Date(date_reward, "%m/%d/%Y")) %>%
group_by(customer_ID) %>%
arrange(date_reward) %>%
mutate(grp = cumsum(date_reward - lag(date_reward, default = 0) >= 60)) %>%
ungroup() %>%
count(customer_ID, grp)
# A tibble: 7 x 3
customer_ID grp n
<chr> <int> <int>
1 CD1190 1 3
2 CD3859 1 2
3 CD3859 2 2
4 CD4457 1 3
5 CD4457 2 2
6 CD4457 3 1
7 CD4457 4 1
https://stackoverflow.com/questions/56799590
复制相似问题