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

如何基于分组变量及前置行条件为器官移植数据编码新变量

器官移植肺部数据集新增outcome变量解决方案

需求说明

处理按捐赠者分组的肺部移植数据集,新增outcome变量,规则如下:

  • 当organ_placed取值为L/R/B时,outcome分别对应标记为Left Single/Right Single/Bilateral
  • 若捐赠者已安置单侧肺(数据中出现过L或R),另一侧肺最终无匹配结果(该捐赠者最大sequence行的organ_placed为NA),则在该最大sequence行标记对应的[Side] Discarded(如示例中捐赠者3的右肺未安置,最后一行标记Right Discarded)

原始数据集

library(tidyverse)
data <- tribble(
  ~donor_id, ~sequence, ~organ_placed,
  1, 5, "L",
  1, 10, "R",
  2, 13, "B",
  3, 4, "L",
  3,69,NA,
  3,70,NA,
  3,71,NA,
  3, 72, NA,
)

期望输出

desired_data <- tribble(
  ~donor_id, ~sequence, ~organ_placed,~outcome,
  1, 5, "L","Left Single",
  1, 10, "R","Right Single",
  2, 13, "B","Bilateral",
  3, 4, "L","Left Single",
  3,69,NA,NA,
  3,70,NA,NA,
  3,71,NA,NA,
  3, 72, NA,"Right Discarded"
)

补全后的代码实现

data <- data %>%
  group_by(donor_id) %>%
  mutate(
    # 标记当前行是否为该捐赠者的最大sequence行
    is_max_seq = sequence == max(sequence),
    # 检查捐赠者已安置的肺类型
    has_L = any(organ_placed == "L", na.rm = TRUE),
    has_R = any(organ_placed == "R", na.rm = TRUE),
    # 补全outcome逻辑
    outcome = case_when(
      organ_placed == "L" ~ "Left Single",
      organ_placed == "R" ~ "Right Single",
      organ_placed == "B" ~ "Bilateral",
      # 最大sequence行且organ_placed为NA,且已安置左肺但未安置右肺 → 标记右肺丢弃
      is_max_seq & is.na(organ_placed) & has_L & !has_R ~ "Right Discarded",
      # 最大sequence行且organ_placed为NA,且已安置右肺但未安置左肺 → 标记左肺丢弃
      is_max_seq & is.na(organ_placed) & has_R & !has_L ~ "Left Discarded",
      # 其他NA情况标记为NA
      TRUE ~ NA_character_
    )
  ) %>%
  # 移除临时辅助列
  select(-is_max_seq, -has_L, -has_R) %>%
  ungroup()

代码逻辑解释

  1. 分组处理:按donor_id分组,确保每个捐赠者的逻辑独立计算
  2. 辅助变量计算:
    • is_max_seq:标记当前行是否为该捐赠者的最大sequence行(即最后一条记录)
    • has_L/has_R:检查该捐赠者是否已安置左/右肺
  3. case_when补全:
    • 针对最大sequence行且organ_placed为NA的情况,根据已安置的肺类型,标记对应另一侧肺为丢弃状态
    • 其他NA情况保持为NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:06:25