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

R语言中提取指定列数值并跳过NA值的实现(癌症登记数据场景)

R实现癌症登记数据特征提取方案

以下代码基于tidyverse套件实现,适配2005-2020年的全量数据,无需手动指定年份列:

library(tidyverse)

# 宽表转长表后分组计算所有目标变量
result <- ex_data %>%
  # 自动拆分x/y前缀与年份后缀,转为id-年份为单位的长表结构
  pivot_longer(
    cols = -c(id, diagnosis_yr),
    names_to = c(".value", "year"),
    names_sep = "_",
    names_transform = list(year = as.integer)
  ) %>%
  group_by(id, diagnosis_yr) %>%
  summarize(
    # 提取最早年份的非空x值
    x_earliest = x[!is.na(x)][which.min(year[!is.na(x)])],
    # 提取最晚年份的非空y值
    y_latest = y[!is.na(y)][which.max(year[!is.na(y)])],
    # 追溯确诊及之前年份的可用x值
    x_at_diagnosis = {
      valid_idx <- year <= diagnosis_yr & !is.na(x)
      if (any(valid_idx)) x[valid_idx][which.max(year[valid_idx])] else NA_real_
    },
    # 追溯确诊及之前年份的可用y值
    y_at_diagnosis = {
      valid_idx <- year <= diagnosis_yr & !is.na(y)
      if (any(valid_idx)) y[valid_idx][which.max(year[valid_idx])] else NA_character_
    },
    .groups = "drop"
  )

运行后得到的result与你给出的wanted表完全一致。代码逻辑完全兼容2005-2020年的全量数据,只要保留x_年份、y_年份的列名规则即可直接使用,无需调整参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:54:01