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

R中映射非数值分期因子 取两列分期字段较高值的实现方法

R实现肿瘤分期跨列取最高值方案

核心思路

先给所有分期定义优先级权重,把缺失值、未知值统一标准化后,逐行对比两列的权重值,取权重最高的对应分期即可。

实现步骤

第一步:定义分期优先级映射

按规则要求,有效值优先级高于Unknown,数值越大优先级越高:

# 优先级从低到高排序,Unknown权重最低,仅当两列都为Unknown/缺失时输出
stage_levels <- c("Unknown", "I", "IA", "IB", "II", "IIA", "IIB", "III", "IIIA", "IIIB", "IIIC", "IV", "IVA", "IVB", "IVC")
# 生成权重映射表
stage_weight <- setNames(seq_along(stage_levels), stage_levels)

第二步:标准化原始数据的分期值

把原始两列里的NA、Unknown/Not Reported都统一替换为Unknown,避免后续匹配出错:

library(dplyr)
df_clean <- df %>%
  mutate(across(c(PathGroupStage, ClinGroupStage), ~case_when(
    is.na(.) | . == "Unknown/Not Reported" ~ "Unknown",
    TRUE ~ .
  )))

第三步:逐行取最高分期生成OutputStage

每行分别获取两列的权重,取权重更大的对应的分期即可:

df_result <- df_clean %>%
  rowwise() %>%
  mutate(
    path_w = stage_weight[PathGroupStage],
    clin_w = stage_weight[ClinGroupStage],
    OutputStage = stage_levels[max(path_w, clin_w)]
  ) %>%
  ungroup() %>%
  # 可选:删除中间计算的权重列
  select(-path_w, -clin_w)

结果验证

运行后生成的结果完全匹配要求:

  • 第2行I和IA对比,输出IA
  • 第5行I和III对比,输出III
  • 第7行IIIA和IIB对比,输出IIIA
  • 第9行两列都缺失,输出Unknown

基础R简化实现

不想依赖dplyr可以用基础R实现:

# 先标准化所有值
df[is.na(df)] <- "Unknown"
df[df == "Unknown/Not Reported"] <- "Unknown"
# 逐行计算结果
df$OutputStage <- apply(df, 1, function(x) {
  w1 <- stage_weight[x[1]]
  w2 <- stage_weight[x[2]]
  stage_levels[max(w1, w2)]
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:27:04