You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将120天间隔内的客户订单按索引日期分组转换为宽格式

120天订单间隔分组转宽格式的R实现

需求说明

将每个客户的订单按120天间隔分组:以超出前一组索引日期120天范围的首个订单日期作为新组的索引日期,每组对应一行;再将组内多笔订单的ID、日期信息转为宽格式列。


数据准备

先将原数据的日期字段转为Date类型,确保后续日期计算准确:

customerid <- c("A1", "A1", "A1", "A1", "A1", "A2", "A2", "A2")
orderid <- c("1", "2", "3", "4", "5", "6", "7", "8")
orderdate <- c("2020-05-19", "2020-09-08", "2020-09-16", "2020-12-21", "2021-01-03", "2020-08-21","2020-11-22","2021-02-01")
df <- data.frame(customerid, orderid, orderdate)

# 转换日期格式为Date类型
df$orderdate <- as.Date(df$orderdate)

步骤1:按客户划分120天间隔组

通过循环跟踪每个组的起始日期,判断订单是否属于当前组,生成组编号:

library(dplyr)

df_grouped <- df %>%
  arrange(customerid, orderdate) %>%
  group_by(customerid) %>%
  mutate(
    group_id = {
      groups <- numeric(n())
      current_start <- first(orderdate)
      current_group <- 1
      groups[1] <- current_group
      # 遍历后续订单,判断是否开启新组
      for(i in 2:n()){
        # 可根据需求调整判断条件:> 表示超出120天当天算新组;>= 表示包含120天当天
        if(orderdate[i] > current_start + 120){
          current_group <- current_group + 1
          current_start <- orderdate[i] # 更新新组的起始日期
        }
        groups[i] <- current_group
      }
      groups
    }
  ) %>%
  ungroup()

关键逻辑:每次开启新组后,后续订单的判断基准更新为新组的起始日期,而非第一个订单的日期。


步骤2:将分组数据转为宽格式

用tidyr::pivot_wider将组内订单的ID、日期按顺序展开为列:

library(tidyr)

final_result <- df_grouped %>%
  group_by(customerid, group_id) %>%
  mutate(order_seq = row_number()) %>% # 给组内订单编序号
  pivot_wider(
    id_cols = c(customerid, group_id),
    names_from = order_seq,
    values_from = c(orderid, orderdate),
    names_glue = "{.value}_{order_seq}" # 列名格式:字段名_序号
  ) %>%
  ungroup()

# 查看结果
print(final_result)

输出示例(简化版)

customeridgroup_idorderid_1orderid_2orderdate_1orderdate_2
A11122020-05-192020-09-08
A11132020-05-192020-09-16
A12452020-12-212021-01-03
A21672020-08-212020-11-22
A228NA2021-02-01NA

(注:若组内只有1笔订单,后续列会显示NA,可根据需求用replace_na()填充)

内容的提问来源于stack exchange,提问作者pandas123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 09:37:57