You need to enable JavaScript to run this app. R语言用mutate与case_when实现分组条件触发后终止计算
优惠活动
大模型
产品
解决方案
定价
更多

R语言用mutate与case_when实现分组条件触发后终止计算

实现代码调整

核心实现逻辑

在现有完成is_churn标记的流程后,按客户分组做行截断处理:

  • 定位每个客户观测序列中第一个满足is_churn == "Yes"的行位置
  • 保留观测序列从起始行到该定位位置的所有行;如果客户在全观测周期内没有出现流失标记,就保留全部观测行
  • 因crossing展开后的数据集本身已按客户分组、观测时间正序排列,无需额外调整行序即可保证截断逻辑符合时间先后要求

完整可运行代码

df %>% 
  filter(termination_date > first_obs | is.na(termination_date)) %>% 
  crossing(obs_seq) %>% 
  mutate(is_churn = case_when(
    termination_date >= obs_seq &
      termination_date < (obs_seq + obs_interval) ~ "Yes",
    TRUE ~ "No"
  )) %>% 
  group_by(customer) %>% 
  slice(seq_len(if_else(
    any(is_churn == "Yes"),
    which.max(is_churn == "Yes"),
    n()
  ))) %>% 
  ungroup()

关键逻辑说明

  • which.max(is_churn == "Yes"):在逻辑判定向量中定位第一个TRUE值的索引(即第一个流失标记所在的行号)。逻辑向量中TRUE对应数值1、FALSE对应0,最大值首次出现的位置就是满足条件的第一行位置
  • if_else分支判断:当客户分组内无任何流失标记时,取分组总行数n()做截断,等价于完整保留该客户所有观测行
  • 运行上述代码后的输出行数、行内容与预期的27行结果完全匹配,不会改动原有is_churn的判定规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 20:06:05