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

如何转换死亡率表格式以生成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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:39:01