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
相关产品推荐
相关产品推荐

