首页 > 解决方案 > 如何按 customer_name 分组并计算 mail_sent?

问题描述

我正在寻找指导来解决 R 中的一个场景,其中我有一个包含以下列的表 - customer_name、zip_code、date_applied(他们申请的日期)、date_mail_sent(向他们邮寄有关该服务的广告的日期)

我希望通过 customer_name 和发送的邮件数获得组计数,从而导致他们提出申请。彼此相隔 90 天内邮寄的日期应组合在一起。这些邮件中的最新邮件应在申请日期的 90 天内。

样本数据集:

customer_name   zip_code    date_applied    date_mail_sent
aaaa            12345           1/15/2017   4/3/2016
aaaa            12345           1/15/2017   9/15/2016
aaaa            12345           1/15/2017   12/5/2016
aaaa            12345           5/15/2017   4/1/2017
aaaa            12345           5/15/2017   4/15/2017
bbbb            45667           3/3/2017    1/2/2017
bbbb            45667           3/3/2017    2/2/2017
bbbb            45667           3/3/2017    3/2/2017
bbbb            45667           12/15/2017  6/30/2017
bbbb            45667           12/15/2017  7/30/2017

期望的结果:

customer_name   zip_code    date_applied    count_of_mail_sent
aaaa            12345           1/5/2016    2
aaaa            12345           5/15/2016   2
bbbb            45667           3/3/2017    3
bbbb            45667           12/15/2017  0

标签: r

解决方案


library(tidyverse)
library(lubridate)
df %>%
  mutate_at(vars(contains("date")), mdy) %>%
  mutate(days_prior = (date_applied - date_mail_sent) / ddays(1)) %>%
  count(customer_name, date_applied, wt = days_prior <= 90)

# A tibble: 4 x 3
  customer_name date_applied     n
  <chr>         <date>       <int>
1 aaaa          2017-01-15       2
2 aaaa          2017-05-15       2
3 bbbb          2017-03-03       3
4 bbbb          2017-12-15       0

推荐阅读