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的记录与示例完全匹配:
| NAME | x attempt | product | TYPE | DATE_CALL | DATE_PURCHASE |
|---|---|---|---|---|---|
| Karen | 1 | M_14 | COMPLAIN | 20021-08-26 18:21:28 | 20021-08-25 18:21:28 |
| Jean | 3 | M_64 | CX_SERVICE | 20021-08-29 20:21:59 | 20021-08-27 20:21:59 |
| Keith | 1 | M_57 | CX_SERVICE | 20021-08-29 20:21:02 | 20021-08-27 20:21:02 |
| Alba | 1 | M_43 | COMPLAIN | 20021-08-30 20:21:03 | 20021-08-29 20:21:04 |
| Alex | 1 | M_36 | CX_SERVICE | 20021-08-25 21:21:05 | 20021-08-25 20:21:05 |
若某客户最后一次来电前无任何购买记录,product、DATE_PURCHASE字段将自动填充为NA,符合业务逻辑。
内容的提问来源于stack exchange,提问作者R_Student
相关产品推荐
相关产品推荐

