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

基于转换键将以i10_dx开头的列转换为ccs开头新列

问题

我有一个数据框,包含若干以i10_dx开头的列,需要利用给定的转换键,创建对应的以ccs开头的新列。

示例数据

原数据框

df <- data.frame(visitlink = c(1001976, 1001976, 1002247), 
                 i10_dx1 = c("C7931", "C7949", NA), 
                 i10_dx2 = c("G9519", "C7951", "C3490"), 
                 i10_dx3 = c("G936", "C7931", "C7931"), 
                 i10_dx4 = c("C7949", NA, "I10"))

转换键

key <- data.frame(icd10 = c("I10", "C3490", "C7931", "C7949", "C7951", "G936", "G9519"), 
                  ccs = c("CIR007", "NEO022", "NEO070", "NEO070", "NEO070", "NVS020", "NVS020"))

解决方案

方法一:使用tidyverse工具链(dplyr + tidyr)

适合需要保持数据宽格式的场景,步骤清晰易读:

library(dplyr)
library(tidyr)

# 生成ccs对应列
ccs_result <- df %>%
  # 提取关联列
  select(visitlink, starts_with("i10_dx")) %>%
  # 转长格式以便匹配编码
  pivot_longer(cols = starts_with("i10_dx"), 
               names_to = "dx_col", 
               values_to = "icd10") %>%
  # 匹配转换键中的ccs编码
  left_join(key, by = "icd10") %>%
  # 生成新列名(替换前缀为ccs)
  mutate(ccs_col = gsub("i10_dx", "ccs", dx_col)) %>%
  # 转回宽格式
  pivot_wider(id_cols = visitlink, 
              names_from = ccs_col, 
              values_from = ccs)

# 合并回原数据框
df_final <- df %>% left_join(ccs_result, by = "visitlink")

方法二:基础R循环实现

无需加载额外包,直接用循环处理每一列:

# 筛选所有i10_dx开头的列名
dx_columns <- grep("^i10_dx", colnames(df), value = TRUE)

# 循环生成对应ccs列
for (col in dx_columns) {
  # 构造新列名
  new_col <- gsub("i10_dx", "ccs", col)
  # 匹配编码并赋值
  df[[new_col]] <- key$ccs[match(df[[col]], key$icd10)]
}

结果说明

处理后的数据框会新增ccs1、ccs2、ccs3、ccs4列,对应原数据中i10_dx1至i10_dx4的编码转换结果,原数据中的NA值会保留在新列中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:58:30