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

基于死亡、转院和数据收集日期在R中创建研究结束日期变量

在R中生成患者随访结束日期(end_date)的方法

示例数据

patiddeath_datetransfer_datedata_collection_end_dateend_date
107/07/201807/07/201601/11/202107/07/2016
207/07/201907/07/201801/11/202107/07/2018
307/07/202007/07/201801/11/202107/07/2018
4NANA01/12/202101/12/2021
5NANA01/11/202101/11/2021
6NA07/09/201601/11/202107/09/2016

实现方案

第一步:转换日期格式

先确保所有日期列是R可识别的日期类型(假设原数据日期格式为日/月/年):

# Base R 写法
df$death_date <- as.Date(df$death_date, format = "%d/%m/%Y")
df$transfer_date <- as.Date(df$transfer_date, format = "%d/%m/%Y")
df$data_collection_end_date <- as.Date(df$data_collection_end_date, format = "%d/%m/%Y")

# tidyverse 写法
library(dplyr)
df <- df %>%
  mutate(across(c(death_date, transfer_date, data_collection_end_date), ~as.Date(., format = "%d/%m/%Y")))

第二步:生成end_date变量

方法1:Base R

利用apply按行计算三个日期的最小值(自动忽略NA):

df$end_date <- apply(df[, c("death_date", "transfer_date", "data_collection_end_date")], 1, function(x) min(x, na.rm = TRUE))
方法2:tidyverse(rowwise写法)

按行处理,逻辑更直观:

df <- df %>%
  rowwise() %>%
  mutate(end_date = min(c(death_date, transfer_date, data_collection_end_date), na.rm = TRUE)) %>%
  ungroup()
方法3:tidyverse(pmap写法)

适合批量处理场景:

library(purrr)
df <- df %>%
  mutate(end_date = pmap_dbl(list(death_date, transfer_date, data_collection_end_date), min, na.rm = TRUE) %>% as.Date(origin = "1970-01-01"))

以上三种方法都能实现需求:当death_date和transfer_date存在有效值时,取三者中的最早日期;当两者均为NA时,自动取data_collection_end_date的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:26:16