如何在R中使用条件分组?
我有一个表,上面有客户ID和日期奖励,我希望得到客户ID发送的奖励的一组计数,条件是每个组只发送60天间隔的奖励。如果一个客户ID的两个日期之间的差异大于60,则该客户ID应为一个单独的组 比如说,如何在R中使用条件分组?,r,R,我有一个表,上面有客户ID和日期奖励,我希望得到客户ID发送的奖励的一组计数,条件是每个组只发送60天间隔的奖励。如果一个客户ID的两个日期之间的差异大于60,则该客户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
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天,则输出可能有多行用于同一客户ID
预期产出:
customer_ID group_count
CD3859 2
CD3859 2
CD1190 3
CD4457 3
CD4457 2
CD4457 1
CD4457 1
这里有一个dplyr解决方案。这会导致客户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
库(dplyr)
df%>%
变异(日期奖励=as.date(日期奖励,“%m/%d/%Y”))%>%
分组依据(客户ID)%>%
安排(日期/奖励)%>%
突变(grp=cumsum(日期奖励-滞后(日期奖励,默认值=0)>=60))%>%
解组()%>%
计数(客户ID,grp)
#一个tibble:7x3
客户识别码
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
谢谢你,乔恩。你提出的解决方案对我有效。