如何在R中对条件进行分组?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (12)

我有一个包含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
提问于
用户回答回答于

这是一个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

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问36 回答
  • 富有想象力的人

    3 粉丝0 提问30 回答
  • 学生

    3 粉丝476 提问28 回答
  • o o

    4 粉丝494 提问27 回答

扫码关注云+社区

领取腾讯云代金券