簡體   English   中英

R中的條件分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM