如何用R语言将ICD10代码数据框转换为对应亚章节?
高效实现ICD10代码到亚章节的映射
方法一:直接提取代码前3个字符(快速极简)
按照你提到的亚章节规则(由ICD10代码前3个字符标识),直接用字符串处理函数提取前3位是最高效的方案:
df <- data.frame(codes = c("Z23","M1711","E0500","Z00129","G4452")) # 提取前3个字符作为亚章节代码 df$sub_chapter <- substr(df$codes, 1, 3)
运行后输出结果:
codes sub_chapter 1 Z23 Z23 2 M1711 M17 3 E0500 E05 4 Z00129 Z00 5 G4452 G44
方法二:利用icd包匹配官方亚章节范围(严谨规范)
如果需要严格匹配ICD10官方定义的亚章节范围(部分亚章节可能对应连续代码段,而非单纯前3位一致),可以借助icd包的内置功能处理范围匹配:
步骤1:安装并加载包
install.packages("devtools") devtools::install_github("jackwasey/icd") library(icd)
步骤2:用icd_map完成映射
icd包的icd_map函数已内置范围逻辑,无需手动展开中间值,直接实现代码到亚章节的精准映射:
# 加载示例数据 df <- data.frame(codes = c("Z23","M1711","E0500","Z00129","G4452")) # 映射亚章节,同时返回亚章节名称 subchap_mapping <- icd_map(df$codes, map = icd10_sub_chapters, return_df = TRUE) # 合并到原数据框 df <- merge(df, subchap_mapping, by.x = "codes", by.y = "icd_code", all.x = TRUE)
运行后输出结果(包含亚章节代码和官方名称):
codes icd_sub_chapter long_name 1 E0500 E05 Thyrotoxicosis with diffuse goiter 2 G4452 G44 Other headache syndromes 3 M1711 M17 Osteoarthritis of knee 4 Z00129 Z00 General adult medical examination 5 Z23 Z23 Encounter for immunization
方法选择建议
- 若你的场景中亚章节严格对应代码前3位,优先用方法一,执行速度最快;
- 若需要贴合官方ICD10亚章节的范围定义,则用方法二,避免手动处理范围的误差。
内容的提问来源于stack exchange,提问作者TheGoat
相关产品推荐
相关产品推荐

