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

如何用tidyverse根据癌症表型缺失将对应年龄变量设为NA

基于tidyverse的解决方案

要实现“当癌症表型变量缺失时,将对应年龄变量设为NA”的需求,关键是为每个*_age变量匹配对应的cancer_*变量,利用across()结合字符串处理和变量引用即可完成:

library(tidyverse)

set.seed(42)
cancer_ds <- data.frame(id = 1000:1009,
                        cancer_a = rep(0:1, length = 10), 
                        cancer_b = c(rep(0, 3), NA, NA, 1, NA, rep(1, 3)), 
                        cancer_c = c(rep(0:1, each = 2, len = 6), rep(NA, 4)), 
                        a_age = sample(30:60, 10, FALSE), 
                        b_age = sample(30:60, 10, FALSE), 
                        c_age = sample(30:60, 10, FALSE)
)

# 核心实现代码
out_ds <- cancer_ds %>%
  mutate(
    across(
      ends_with("age"),
      ~ifelse(
        is.na(!!sym(str_c("cancer_", str_remove(cur_column(), "_age")))),
        NA,
        .x
      )
    )
  )

# 验证结果与期望输出一致
all.equal(out_ds, out_ds_exp)

代码说明

  • ends_with("age"):选中所有以age结尾的年龄变量
  • cur_column():获取当前正在处理的年龄列名(如a_age)
  • str_remove(cur_column(), "_age"):提取年龄变量的前缀(如从a_age得到a)
  • str_c("cancer_", ...):拼接成对应的癌症表型变量名(如cancer_a)
  • !!sym(...):将字符串形式的变量名转换为可引用的列变量
  • ifelse(is.na(...), NA, .x):当对应癌症表型为NA时,将年龄设为NA,否则保留原值

该方案无需手动指定每一组变量,可自动适配20余种癌症类型的数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:06:17