如何在R中判断客户交易前24小时内是否收到邮件并返回TRUE
解决方案
步骤说明
- 先将两个数据集中的日期字符串转换为可计算的时间格式——原数据是文本格式,无法直接进行时间差运算。
- 按客户ID关联交易记录和邮件记录,让每个订单对应该客户的所有邮件。
- 判断每封邮件是否在订单发生的前24小时内(邮件时间需晚于订单前一天的同一时刻,且早于订单发生时刻)。
- 按订单聚合,只要该订单有符合条件的邮件,就标记为TRUE,否则为FALSE。
完整代码
library(dplyr) library(lubridate) # 转换日期格式为POSIXct(可计算的时间格式) transactions <- transactions %>% mutate(order_date = dmy_hms(order_date)) emails <- emails %>% mutate(email_date = dmy_hms(email_date)) # 关联数据并生成目标列 result <- transactions %>% left_join(emails, by = "customer_id") %>% # 判断邮件是否在订单前24小时内 mutate(within_24h = email_date >= (order_date - days(1)) & email_date < order_date) %>% # 按订单分组,判断是否存在符合条件的邮件 group_by(order_id, customer_id, order_date) %>% summarise(email_last_24_hours = any(within_24h, na.rm = TRUE), .groups = "drop") # 查看结果 print(result)
结果说明
运行代码后得到的result数据集与预期一致:
- 客户1的第一笔订单(01.02.2023 10:00:00)前24小时内收到了两封邮件,
email_last_24_hours为TRUE。 - 客户1的第二笔订单(01.04.2023 10:00:00)前24小时内无邮件记录,
email_last_24_hours为FALSE。 - 客户2的订单(01.02.2023 10:00:00)对应的邮件与订单时间相同,不满足“早于订单时刻”的条件,
email_last_24_hours为FALSE。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

