如何在R中使用条件分组?

如何在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

我有一个表,上面有客户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
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

谢谢你,乔恩。你提出的解决方案对我有效。