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

如何基于120天时间区间将客户订单DataFrame转换为宽格式

解决R中客户订单120天区间的宽格式转换问题

首先对原始数据做预处理,转换日期格式并按客户、订单时间排序:

library(dplyr)
library(tidyr)

# 转换日期类型并按客户+订单日期排序
df <- df %>%
  mutate(orderdate = as.Date(orderdate)) %>%
  arrange(customerid, orderdate)

接下来按客户分组,精准划分120天订单区间:
核心逻辑:以每个客户的首单日期为首个区间起始,后续订单若与当前区间起始日期差超过120天,则开启新区间,新区间起始为当前订单日期。

df <- df %>%
  group_by(customerid) %>%
  mutate(
    # 计算当前订单与客户首单的天数差
    day_diff = orderdate - first(orderdate),
    # 判断是否需要新建区间:非首单且与首单差超120天则标记
    new_group = ifelse(day_diff > 120 & row_number() != 1, 1, 0),
    # 累积标记生成区间分组ID
    group_id = cumsum(new_group) + 1
  ) %>%
  ungroup()

最后将每个客户的每个区间转换为宽格式:

result <- df %>%
  group_by(customerid, group_id) %>%
  # 为每个区间内的订单生成序号列名
  mutate(order_num = paste0("order_", row_number())) %>%
  pivot_wider(
    id_cols = c(customerid, group_id),
    names_from = order_num,
    values_from = orderid
  ) %>%
  ungroup()

# 可选:移除group_id列(若不需要保留区间标识)
result <- result %>% select(-group_id)

运行后输出结果如下:

customeridorder_1order_2order_3
A1123
A145NA
A2678

该方案能准确区分跨120天的订单区间:比如A1的订单4(2020-12-21)与首单(2020-05-19)间隔超120天,单独划分为新区间;A2的三个订单均在首单120天范围内,合并为一行。

内容的提问来源于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 05:22:31