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

如何用R语言基于ICD-10代码创建哑变量,判断字段是否在C00-D48X区间

解决方案

步骤1:修正并准备数据

首先修正原始数据中的输入错误(原数据中第四个LINHAA1值为0985,应为O985),同时确保字段为字符类型而非因子:

data <- data.frame(LINHAA1 = c("B342", "C000", "D450", "O985"),
                   LINHAA2 = c("U071", "C99", "D68X", "J061"),
                   LINHAA3 = c("D48X", "Y098", "X223", "D640"),
                   stringsAsFactors = FALSE)

步骤2:编写判断函数

定义函数判断单个ICD-10代码是否属于第2章(C00-D48X区间),利用字符串字典序进行范围判断:

is_chapter2 <- function(code) {
  if (is.na(code) || code == "") return(FALSE)
  code >= "C00" && code <= "D48X"
}

步骤3:生成哑变量CHAPTER2

按行遍历LINHAA1至LINHAA3字段,只要任意一个代码符合条件,CHAPTER2赋值为1,否则为0:

data$CHAPTER2 <- apply(data[, c("LINHAA1", "LINHAA2", "LINHAA3")], 1, function(row) {
  any(sapply(row, is_chapter2)) * 1
})

验证结果

运行代码后查看输出:

print(data)

输出结果与期望一致:

LINHAA1 LINHAA2 LINHAA3 CHAPTER2
1    B342    U071    D48X        1
2    C000     C99    Y098        1
3    D450    D68X    X223        1
4    O985    J061    D640        0

逻辑说明

  • R语言中字符串的字典序比较完全适配ICD-10的编码规则,C00到D48X的范围可以直接通过>=和<=判断。
  • apply按行处理目标字段,sapply对每个字段执行判断,any()检查是否存在符合条件的代码,最后通过*1将布尔值转换为1/0的哑变量格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:41:11