如何在R中将诊断编码分组为疾病类别新变量
解决R语言中诊断编码分组为疾病类别的问题
方法1:修正case_when()的用法
你之前的代码错误在于用==匹配向量(会引发循环匹配问题),且不需要嵌套case_when。正确做法是用%in%判断编码是否属于目标组,代码如下:
library(dplyr) data <- data %>% mutate(diagnosis = case_when( diag_code %in% c(1,2,3,4,84) ~ "resp disease", diag_code %in% c(5,6,7,32,56) ~ "CVD disease", TRUE ~ "Unknown" ))
%in%是匹配多个值的正确方式,用来检查diag_code是否在指定编码列表中case_when按顺序匹配条件,第一个符合的条件会返回对应类别- 最后一行
TRUE ~ "Unknown"处理所有未匹配到的编码
方法2:用recode()快速映射
如果编码和类别对应关系简单,recode()是更简洁的选择:
data <- data %>% mutate(diagnosis = recode( diag_code, `1` = "resp disease", `2` = "resp disease", `3` = "resp disease", `4` = "resp disease", `84` = "resp disease", `5` = "CVD disease", `6` = "CVD disease", `7` = "CVD disease", `32` = "CVD disease", `56` = "CVD disease", .default = "Unknown" ))
若需要diagnosis为因子类型,替换成recode_factor()即可。
方法3:映射表合并(适合大量编码场景)
如果后续要频繁修改或扩展疾病类别,建议先创建映射表,再通过合并实现分组,这种方式更易维护:
# 创建诊断编码-疾病类别的映射表 diag_map <- tibble( diag_code = c(1,2,3,4,84,5,6,7,32,56), diagnosis = c(rep("resp disease",5), rep("CVD disease",5)) ) # 合并原数据和映射表,处理未匹配的编码 data <- data %>% left_join(diag_map, by = "diag_code") %>% mutate(diagnosis = ifelse(is.na(diagnosis), "Unknown", diagnosis))
内容的提问来源于stack exchange,提问作者Alaina
相关产品推荐
相关产品推荐

