我正在寻找指南来解决R中的一个场景,其中我有一个customer_ID和date_mailed的列表。customer_ID是每个客户的唯一ID,date_mailed包含向这些客户发送邮件的日期。我希望得到一个由customer_ID发送的邮件数量的组计数,其中每组将是邮件发送间隔不到90天。示例数据集:

对于customer_ID 123,2/28和6/1之间的差异是93天,所以它是两组。以下是所需的输出:为了清楚起见,即使Customer_ID 123是相同的,但是第4行123和第3行123之间的间隔超过90天,我希望将前三个123分组在一起,并将下两个123分组在一起。

发布于 2019-06-23 15:36:56
另一种选择:
library(dplyr)
df %>%
mutate(Date_Mailed = as.Date(Date_Mailed, "%m/%d/%Y")) %>%
count(
Customer_ID,
grp = cumsum(c(0, +(Date_Mailed > (lag(Date_Mailed) + 90))[-1])),
name = 'Group_Mail_Count'
) %>%
select(-grp)输出:
Customer_ID Group_Mail_Count
<dbl> <int>
1 123 3
2 123 2
3 456 3
4 890 1
5 890 2或使用data.table
library(data.table)
setDT(df)[, Date_Mailed := as.Date(Date_Mailed, "%m/%d/%Y")][
, .(Group_Mail_Count = .N), by = .(Customer_ID,
cumsum(c(0, +(Date_Mailed > (lag(Date_Mailed) + 90))[-1])))
][, 'cumsum' := NULL]输出:
Customer_ID Group_Mail_Count
1: 123 3
2: 123 2
3: 456 3
4: 890 1
5: 890 2https://stackoverflow.com/questions/56720618
复制相似问题