如何转换死亡率表格式以生成R语言Kaplan-Meier生存曲线
解决方案
dplyr生态完全可以实现该需求,不需要使用循环或lapply,tidyr包(tidyverse生态一员,和dplyr兼容)中的uncount()函数就是专门用于按计数字段展开行的工具,效率远高于循环实现。
具体实现步骤
1. 加载依赖包
# 核心处理包 library(dplyr) library(tidyr) # 生存分析绘图包 library(survival) library(survminer)
2. 数据转换代码
假设你读取的1905队列普查数据存储在名为census_df的数据框中:
life_span_table <- census_df %>% mutate( # 寿命直接取Age字段即可,与Year - BirthYear计算结果完全一致 Lifespan = Age, Entry_type = "B", Departure_type = 1, # 预生成行索引,展开后可作为唯一ID的生成基础 tmp_id = row_number() ) %>% # 按Total字段值展开行,每一行重复Total次,对应该年龄死亡的所有个体 uncount(Total) %>% # 生成最终唯一ID mutate(ID = row_number()) %>% # 选择你需要的输出字段,可按需调整 select(ID, Entry_type, Departure_type, Lifespan)
3. 调用原有逻辑绘图
只需要把原有代码中的结局变量名和处理后的数据对应即可:
survival_plot <- ggsurvplot( fit = survfit(Surv(Lifespan, Departure_type) ~ 1, data = life_span_table), xlab = "Years", ylab = "Overall survival probability", surv.median.line = "hv", title = "1905出生队列生存曲线", legend.title="")
补充说明
如果需要保留Birth_date、Death_date字段,可在mutate步骤中补充生成:
# 需要先加载lubridate包处理日期 library(lubridate) # 在mutate中新增以下两行 Birth_date = ymd(paste0(BirthYear, "-01-01")), Death_date = ymd(paste0(Year, "-12-31"))
内容的提问来源于stack exchange,提问作者user964689
相关产品推荐
相关产品推荐

