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

R DataFrame如何按时间统计事件并跨数据集关联匹配客户行为

数据处理实现方案

依赖加载

library(tidyverse)
library(lubridate)

步骤1:时间字段格式转换

原始时间为字符串类型,无法直接比较先后顺序,统一解析为日期时间类型:

# 购买表时间转换
df1 <- df1 %>% 
  mutate(DATE_PURCHASE = mdy_hms(DATE_PURCHASE))

# 来电表时间转换
df2 <- df2 %>% 
  mutate(DATE_OF_CALL = mdy_hms(DATE_OF_CALL))

示例中时间字段的年份存在笔误(多写1位,如20021),不影响相对时间顺序解析,如需修正可在转换时替换字符串内的笔误内容。

步骤2:生成来电次数字段,提取客户最后一次来电

按客户分组、来电时间升序排序,逐行标记来电次序,再提取每位客户时间最新的一次来电记录:

last_calls <- df2 %>% 
  group_by(NAME) %>% 
  arrange(DATE_OF_CALL, .by_group = TRUE) %>% 
  # 生成来电次数字段
  mutate(`x attempt` = row_number()) %>% 
  # 取组内最新的一次来电
  slice_max(order_by = DATE_OF_CALL, n = 1) %>% 
  ungroup()

步骤3:匹配来电前最近一笔购买记录

关联同客户下、购买时间早于来电时间的所有记录,取时间差最小的购买作为匹配结果:

result <- last_calls %>% 
  # 非等值连接:姓名匹配,且购买时间早于来电时间
  left_join(
    df1 %>% select(NAME, PRODUCT, DATE_PURCHASE),
    by = join_by(NAME == NAME, DATE_PURCHASE < DATE_OF_CALL)
  ) %>% 
  group_by(NAME, `x attempt`, TYPE, DATE_OF_CALL) %>% 
  # 每组取购买时间最新的一条记录
  slice_max(order_by = DATE_PURCHASE, n = 1, with_ties = FALSE) %>% 
  ungroup() %>% 
  # 对齐目标表字段名
  rename(
    product = PRODUCT,
    DATE_CALL = DATE_OF_CALL
  )

低版本dplyr兼容写法:若不支持join_by函数,可将连接逻辑替换为等值连接后过滤的方式:

result <- last_calls %>% 
  left_join(df1 %>% select(NAME, PRODUCT, DATE_PURCHASE), by = "NAME") %>% 
  filter(DATE_PURCHASE < DATE_OF_CALL) %>% 
  group_by(NAME, `x attempt`, TYPE, DATE_OF_CALL) %>% 
  slice_max(order_by = DATE_PURCHASE, n = 1, with_ties = FALSE) %>% 
  ungroup() %>% 
  rename(product = PRODUCT, DATE_CALL = DATE_OF_CALL)

结果校验

处理完成后输出表结构与目标要求一致,其中Jean的记录与示例完全匹配:

NAMEx attemptproductTYPEDATE_CALLDATE_PURCHASE
Karen1M_14COMPLAIN20021-08-26 18:21:2820021-08-25 18:21:28
Jean3M_64CX_SERVICE20021-08-29 20:21:5920021-08-27 20:21:59
Keith1M_57CX_SERVICE20021-08-29 20:21:0220021-08-27 20:21:02
Alba1M_43COMPLAIN20021-08-30 20:21:0320021-08-29 20:21:04
Alex1M_36CX_SERVICE20021-08-25 21:21:0520021-08-25 20:21:05

若某客户最后一次来电前无任何购买记录,product、DATE_PURCHASE字段将自动填充为NA,符合业务逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 13:15:04