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

在R中基于入院日期计算不同时段生存状态并生成统计表格

R语言处理死亡时间分类变量及统计表格实现

1. 数据预处理:转换日期格式

原始数据中的日期为字符型,需先转为R可识别的Date类型,这里使用lubridate包的dmy()函数适配日-月-年格式:

# 安装并加载lubridate包(首次使用需安装)
install.packages("lubridate")
library(lubridate)

# 生成示例数据并转换日期
set.seed(1)
tep <- data.frame(
  Date_of_birth = sample(c("11-12-1987", "11-10-1999", "19-01-1977", "20-12-1950"), 20, TRUE),
  Hospital_admission = sample(c("11-02-2019", "11-03-2019", "10-02-2019", "11-03-2019", "10-03-2019"), 20, TRUE),
  Death_date = sample(c("10-03-2019", "10-06-2019", "12-01-2020", "05-03-2019", "01-02-2020"), 20, TRUE)
)

# 转换日期列
tep$Date_of_birth <- dmy(tep$Date_of_birth)
tep$Hospital_admission <- dmy(tep$Hospital_admission)
tep$Death_date <- dmy(tep$Death_date)

2. 创建死亡时间分类变量

计算入院到死亡的时间差,生成三个二分类变量(1=符合条件,0=不符合),同时处理死亡日期早于入院日期的异常数据:

# 计算入院至死亡的天数差
tep$days_since_admission <- as.numeric(difftime(tep$Death_date, tep$Hospital_admission, units = "days"))

# 30天内死亡标记
tep$death_30d <- ifelse(tep$days_since_admission >= 0 & tep$days_since_admission <= 30, 1, 0)

# 6个月内死亡标记(用%m+%计算准确的6个月后日期)
tep$death_6m <- ifelse(tep$Death_date >= tep$Hospital_admission & tep$Death_date <= tep$Hospital_admission %m+% months(6), 1, 0)

# 1年内死亡标记
tep$death_1y <- ifelse(tep$Death_date >= tep$Hospital_admission & tep$Death_date <= tep$Hospital_admission %m+% years(1), 1, 0)

3. 模拟gender变量(原始数据无此字段)

按需求生成性别分组变量:

set.seed(1)
tep$gender <- sample(c("Male", "Female"), 20, replace = TRUE)

4. 生成总体百分比统计表格

基础R实现

# 计算频数与百分比
death_summary <- rbind(
  "30天内死亡" = c(Count = sum(tep$death_30d), Percentage = round(mean(tep$death_30d)*100, 1)),
  "6个月内死亡" = c(Count = sum(tep$death_6m), Percentage = round(mean(tep$death_6m)*100, 1)),
  "1年内死亡" = c(Count = sum(tep$death_1y), Percentage = round(mean(tep$death_1y)*100, 1))
)

print(death_summary)

美观表格实现(dplyr+gt)

install.packages(c("dplyr", "gt"))
library(dplyr)
library(gt)

tep %>%
  summarise(
    `30天内死亡(%)` = round(mean(death_30d)*100, 1),
    `6个月内死亡(%)` = round(mean(death_6m)*100, 1),
    `1年内死亡(%)` = round(mean(death_1y)*100, 1)
  ) %>%
  gt() %>%
  tab_header(title = "死亡时间分类变量总体统计")

5. 按gender分组的统计表格

基础R实现

gender_death_summary <- tep %>%
  group_by(gender) %>%
  summarise(
    `30天内死亡(%)` = round(mean(death_30d)*100, 1),
    `6个月内死亡(%)` = round(mean(death_6m)*100, 1),
    `1年内死亡(%)` = round(mean(death_1y)*100, 1)
  )

print(gender_death_summary)

美观表格实现(gt)

gender_death_summary %>%
  gt() %>%
  tab_header(title = "按性别分组的死亡时间统计") %>%
  cols_label(gender = "性别")

关键注意点

  • 日期格式适配:若原始日期格式为年-月-日或月-日-年,需替换为ymd()或mdy()函数
  • 异常值处理:死亡日期早于入院日期的样本逻辑不合理,统一标记为0
  • 时间精度:使用%m+%计算月/年增量,比固定天数更精准(自动处理不同月份天数差异)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:37:24