[英]Conditional grouping in R
我正在尋找解決R場景的指南,該場景中有一個customer_ID和date_mailed列表。 customer_ID是每個客戶的唯一ID,date_mailed包含向這些客戶發送郵件的日期。 我正在尋找由customer_ID發送的郵件數量的組計數,其中每個組將是相隔少於90天發送的郵件。 示例數據集:
customer_ID 123的2/28和6/1之間的差異為93天,因此將其划分為2個組。 這是所需的輸出:請注意,即使Customer_ID 123相同,但是第四行123和第三行123之間的間隔超過90天,我希望將前三個123組合在一起,然后將后兩個123組合在一起。
另外一個選項:
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 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.