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

R中如何基于目标ICD9编码匹配行并新增neuro标识列

问题原因排查
    1. 数据类型不匹配:你的ICD9列都是字符型(<chr>),但你定义的目标编码是数值型,类型不一致导致匹配失效。
    1. 向量构造语法错误:c(320:337, 339:359 and 430:438)是无效写法,R中拼接多个向量使用逗号分隔,不应使用and。
    1. 第一种方法逻辑错误:for循环中的i是列索引(取值为2、3……ncol(df)),你拿列索引和ICD编码值匹配,自然返回全0。
    1. 第二种方法逻辑错误:df == x是将整个数据框和向量x逐一比较,而非判断每行元素是否存在于x中,逻辑完全不匹配。
正确解决方案

方法1:tidyverse(推荐,代码简洁易读)

使用dplyr的if_any函数,专门用于判断多列中是否有任意一列满足条件:

library(dplyr)
# 构造目标ICD编码,转为字符型和数据类型匹配
target_icd <- as.character(c(320:337, 339:359, 430:438))
df <- df %>%
  mutate(
    # 选中所有ICD9开头的列,判断任意列值在目标编码中,转成1/0标识
    neuro = as.integer(if_any(starts_with("ICD9"), ~ .x %in% target_icd, na.rm = TRUE))
  )

方法2:base R

# 构造目标ICD编码
target_icd <- as.character(c(320:337, 339:359, 430:438))
# 提取所有ICD9列(示例数据中为第2到第10列)
icd_columns <- df[, 2:10]
# 逐行判断是否存在目标编码,转成1/0
df$neuro <- as.integer(apply(icd_columns, 1, function(row) any(row %in% target_icd, na.rm = TRUE)))
结果验证

针对你给出的示例数据集,运行后neuro列结果如下:

IDneuro
200020380
200030110
200030191
200030260
200040181
200070161

和预期完全一致:包含320、436、339的行均被标识为1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:10