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

如何用ifelse()/case_when()分组CPT Code且避免重复变量?

问题分析与解决方案

错误根源

你的代码中使用CPT Code == (xxx | xxx)的写法存在语法逻辑错误:R会先对括号内的数值执行逻辑或运算(|),非零数值在逻辑判断中会被视为TRUE,因此整个括号的结果是TRUE。实际执行的是CPT Code == TRUE,只有当CPT Code等于1时才会匹配,最终导致所有数据都被归类为Other。

正确实现方式

要避免重复书写CPT Code == xxxxx,同时正确完成分组,推荐结合%in%运算符和case_when()函数(比嵌套ifelse()更简洁易读):

方法1:提前定义手术组代码清单(适合长列表,易维护)

library(dplyr)
library(janitor)

# 定义各手术组对应的CPT代码集合
pancreatectomy_cpts <- c(48120, 48140, 48145, 48146, 48148)
colectomy_cpts <- c(44140, 44141, 44143, 44144)
proctectomy_cpts <- c(44155, 44156, 44157, 44158, 44211)

df <- df %>% 
  mutate(
    `CPT Code` = as.numeric(`CPT Code`),
    proc_group = case_when(
      `CPT Code` %in% pancreatectomy_cpts ~ "Pancreatectomy",
      `CPT Code` %in% colectomy_cpts ~ "Colectomy",
      `CPT Code` %in% proctectomy_cpts ~ "Proctectomy",
      TRUE ~ "Other" # 未匹配到上述组别的数据归为Other
    )
  )

tabyl(df$proc_group)

方法2:直接在case_when()中写代码向量(简短列表适用)

library(dplyr)
library(janitor)

df <- df %>% 
  mutate(
    `CPT Code` = as.numeric(`CPT Code`),
    proc_group = case_when(
      `CPT Code` %in% c(48120, 48140, 48145, 48146, 48148) ~ "Pancreatectomy",
      `CPT Code` %in% c(44140, 44141, 44143, 44144) ~ "Colectomy",
      `CPT Code` %in% c(44155, 44156, 44157, 44158, 44211) ~ "Proctectomy",
      TRUE ~ "Other"
    )
  )

tabyl(df$proc_group)

优势说明

  • %in%专门用于判断元素是否属于某个集合,完美替代重复的==+|写法,避免语法错误
  • case_when()采用顺序判断结构,逻辑清晰,比多层嵌套ifelse()更易读和维护
  • 提前定义代码清单的方式,后续修改或扩展CPT代码时,只需调整清单变量,无需改动判断逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:55:24