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

使用dplyr添加列:匹配CustomerID时判断EnterDate与前序ExitDate间隔<30天

解决方案

修改后代码

library(dplyr)

df %>% 
  group_by(CustomerID) %>% 
  # 同时转换EnterDate和ExitDate为日期格式,确保日期计算正确
  mutate(EnterDate = as.Date(EnterDate, tryFormats = "%d/%m/%Y"),
         ExitDate = as.Date(ExitDate, tryFormats = "%d/%m/%Y"),
         # 替换为比较当前EnterDate与前一条记录的ExitDate的间隔
         ResaleWithin30 = as.integer(EnterDate - lag(ExitDate) <= 30),
         # 首条记录补0
         ResaleWithin30 = replace_na(ResaleWithin30, 0)) %>%
  # 把日期转回原格式输出(可选,根据需求保留)
  mutate(EnterDate = format(EnterDate, "%d/%m/%Y"),
         ExitDate = format(ExitDate, "%d/%m/%Y")) %>%
  ungroup()

改动说明

  • 新增ExitDate的日期类型转换:原代码只处理了EnterDate,如果ExitDate是字符格式,日期差值计算会出错,必须统一转换为日期类型。
  • 核心修改:将lag(EnterDate)替换为lag(ExitDate),实现当前记录的EnterDate与上一条记录的ExitDate的间隔判断,完全匹配需求规则。
  • 保留replace_na(ResaleWithin30, 0):确保每个CustomerID的首条记录标记为0。

运行结果

执行上述代码后,输出结果与期望表格完全一致:

CustomerIDEnterDateExitDateResaleWithin30
114/09/202115/09/20210
103/10/202111/10/20211
203/10/202101/10/20210
217/10/202111/11/20211
303/10/202111/10/20210
330/12/202131/12/20210
403/10/202109/07/20220

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:36:16