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

R语言使用case_when生成新列无法得到预期分类如何解决?

输出偏差原因

  • case_when的条件匹配按顺序执行,若优先级设置错误,比如未将「存在Yes」的判断放在最前面,会导致后续低优先级条件误匹配全No的行
  • 手动枚举所有组合的|条件时,未正确处理NA和Unknown的逻辑:R中NA参与比较运算会返回NA,无法匹配预设的TRUE/FALSE判断分支,进而出现非预期赋值
  • 多字段逐行判断用手动写条件的方式容错率极低,只要漏一种组合就会出现偏差

仅基于tidyverse的实现方案

无需枚举所有组合,使用dplyr内置的行级判断函数if_any/if_all即可完全覆盖所有规则:

library(tidyverse)

# 假设你的原始数据集名为df
df_result <- df %>%
  # 先将三个字段中的Unknown统一转为NA,减少多余判断分支
  mutate(across(c(previous_cabg, previous_pci, previous_ami), ~na_if(.x, "Unknown"))) %>%
  mutate(first_attack = case_when(
    # 匹配所有存在Yes的场景,覆盖规则1、4、5
    if_any(c(previous_cabg, previous_pci, previous_ami), ~.x == "Yes") ~ "Yes",
    # 匹配所有非NA值都是No的场景,覆盖规则2、3
    if_all(c(previous_cabg, previous_pci, previous_ami), ~.x == "No" | is.na(.x)) ~ "No"
  ))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 00:18:03