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

R语言中适配种子发芽生存分析的数据格式转换方法问询

批次发芽数据转生存分析适配格式实现方案

核心修改逻辑

原有二元转换逻辑仅生成0/1发芽状态,本次修改新增两个生存分析核心字段,无需额外数据即可适配所有主流生存分析模型:

  • time:发芽种子记录实际发芽天数,试验结束未发芽的种子记录试验最大天数(右删失时间)
  • status:1代表发芽(观测到目标事件),0代表删失(未观测到发芽),可直接复用原有0/1二元标记逻辑

示例实现代码(R语言)

library(tidyverse)

# 转换函数参数说明:
# raw_data:原始批次数据框
# day_prefix:天数列的统一前缀,默认匹配"Dx"格式的列名
# total_seeds_per_batch:每批次的总种子数,默认25
batch_to_survival <- function(raw_data, day_prefix = "D", total_seeds_per_batch = 25) {
  # 自动识别所有天数列并按数值排序,避免列名顺序错误
  day_cols <- str_sort(
    names(raw_data)[str_starts(names(raw_data), day_prefix)],
    numeric = TRUE
  )
  # 提取试验总天数
  max_test_day <- as.numeric(str_remove(day_cols, day_prefix)) %>% max()
  
  raw_data %>%
    rowwise() %>%
    mutate(
      # 生成所有单粒种子的对应时间:发芽种子填实际发芽日,未发芽填试验总天数
      time = list(c(
        # 遍历每天的发芽数,重复对应天数作为发芽时间
        map2(as.numeric(str_remove(day_cols, day_prefix)), c_across(all_of(day_cols)), ~ rep(.x, .y)) %>% unlist(),
        # 未发芽种子填充试验最大天数作为删失时间
        rep(max_test_day, total_seeds_per_batch - sum(c_across(all_of(day_cols))))
      )),
      # 生成所有单粒种子的事件状态
      status = list(c(
        rep(1, sum(c_across(all_of(day_cols)))),
        rep(0, total_seeds_per_batch - sum(c_across(all_of(day_cols))))
      ))
    ) %>%
    # 拆分为单粒种子一行的结构
    unnest(c(time, status)) %>%
    # 保留所有批次维度的协变量(可根据实际列名调整select规则)
    select(batch_id, everything(), -all_of(day_cols)) %>%
    ungroup()
}

输出格式说明

输出结果每一行对应1粒种子,除保留所有原始批次协变量(品种、温度、处理等)外,仅新增time和status两列,可直接带入生存分析工具做Kaplan-Meier估计、Cox比例风险模型等分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:30:02