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
相关产品推荐
相关产品推荐

