首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在R中使用条件进行分组?

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

Stack Overflow用户
提问于 2019-06-28 07:59:49
回答 1查看 46关注 0票数 0

我和customer_ID和date_reward有一张表,我希望得到customer_ID发送的奖励的组计数,条件是每个组将只有60天的间隔发出的奖励。如果customer_ID的两个日期之间的差异大于60,那么对于同一个customer_ID,它应该是一个单独的组。

例如,

代码语言:javascript
复制
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的输出可能有多行。

预期输出:

代码语言:javascript
复制
customer_ID group_count
CD3859          2
CD3859          2
CD1190          3
CD4457          3
CD4457          2
CD4457          1
CD4457          1
EN

回答 1

Stack Overflow用户

发布于 2019-06-28 08:26:52

这是一个dplyr解决方案。这会导致customer_ID的顺序不同,我认为b/c dplyr默认情况下对组进行排序,不确定最后是否值得重新排序。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56799590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档