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

如何在R的DataFrame中定位首个感染ICD-10码列及POA状态

解决方案

步骤1:新增infxn_col_name列(首个感染编码的列名)

利用dplyr的rowwise()结合c_across()逐行处理ICD编码列,定位首个匹配感染编码的列名:

library(dplyr)

DF <- DF %>%
  rowwise() %>%
  mutate(
    infxn_col_name = {
      # 获取当前行所有ICD编码列的值
      icd_row_vals <- c_across(all_of(ICD10_code_columns))
      # 找到第一个属于感染编码的位置索引
      first_match_idx <- which(icd_row_vals %in% ICD10_infxn)[1]
      # 根据索引返回对应列名,无匹配则返回NA
      if (!is.na(first_match_idx)) ICD10_code_columns[first_match_idx] else NA_character_
    }
  ) %>%
  ungroup()

步骤2:新增对应POA状态列

根据POA列的命名规则,有两种常见实现方式:

情况1:已知POA列名向量(推荐)

如果有与ICD10_code_columns顺序完全对应的POA列名向量POA_columns,先建立ICD到POA的列名映射:

# 建立ICD列名到POA列名的映射
icd_to_poa <- setNames(POA_columns, ICD10_code_columns)

DF <- DF %>%
  rowwise() %>%
  mutate(
    poa_status = if (!is.na(infxn_col_name)) get(icd_to_poa[infxn_col_name]) else NA
  ) %>%
  ungroup()

情况2:通过字符串规则推导POA列名

如果POA列名是ICD列名的固定替换(比如把ICD替换为POA),用stringr做字符串替换:

library(stringr)

DF <- DF %>%
  rowwise() %>%
  mutate(
    poa_status = if (!is.na(infxn_col_name)) {
      # 推导对应POA列名
      poa_col_name <- str_replace(infxn_col_name, "ICD", "POA")
      get(poa_col_name)
    } else NA
  ) %>%
  ungroup()

完整整合代码

将两步合并,一次性生成两个新列:

library(dplyr)
library(stringr)

# 假设有POA列名向量的情况
icd_to_poa <- setNames(POA_columns, ICD10_code_columns)

DF <- DF %>%
  rowwise() %>%
  mutate(
    infxn_col_name = {
      icd_row_vals <- c_across(all_of(ICD10_code_columns))
      first_match_idx <- which(icd_row_vals %in% ICD10_infxn)[1]
      if (!is.na(first_match_idx)) ICD10_code_columns[first_match_idx] else NA_character_
    },
    poa_status = if (!is.na(infxn_col_name)) get(icd_to_poa[infxn_col_name]) else NA
  ) %>%
  ungroup()

关于之前的报错原因

max.col()仅支持数值/逻辑类型的矩阵,你的ICD编码是字符类型,直接传入会触发类型不匹配错误;apply()虽能处理字符列,但索引处理逻辑繁琐,不如dplyr的rowwise()方案直观且符合你的使用习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:00:19