我在R中有纵向患者数据。我想从我已有的三个不同日期创建一个end_date变量(下表第4列(,以先发生的日期为准。如果没有发生死亡或转移,end_date将等于data_collection_end_date:
patid | 死亡日期 | 转移日期数据采集结束日期||||
---|---|---|---|---|---|
1 | 2018年7月7日 | 2021年11月1日 | 2016年7月07日 | ||
2019年7月7日 | 2018年7月07日 | 2021年11月1日 | 2018年7日 | ||
3 | 2020年7月7日 | 2018年7月07日 | 2021年11月1日 | 018年7月07||
4 | NA | NA2021年1月12日 | <2021年12月1日>|||
5 | NA | NA | 2021年11月1日 | ||
6 | NA | 2016年9月7日 | 2021年11月1日 | 2016年09月7日 |
捕获最先发生的:
library(dplyr)
library(lubridate)
# Your sample data
patid <- c(1:6)
death_date <- dmy(c("07/07/2018", "07/07/2019", "07/07/2020", NA, NA, NA))
transfer_date <- dmy(c("07/07/2016", "07/07/2018", "07/07/2018", NA, NA, "07/09/2016"))
data_collection_end_date <- dmy(c("01/11/2021", "01/11/2021", "01/11/2021", "01/11/2021", "01/11/2021", "01/11/2021"))
# Data frame
df <- data.frame(patid, death_date, transfer_date, data_collection_end_date)
# @GuedesBF's solution corrected to capture earliest date
df %>% rowwise() %>%
mutate(end_date = min(c_across(death_date:data_collection_end_date), na.rm = TRUE))
如果日期是正确的日期类型对象,我们可以使用rowwise((和max((。我们可能不得不将它们转换为日期,以防它们是字符串。
library(dplyr)
data %>% rowwise() %>%
mutate(end_date = min(c_across(death_rate:data_collection_end_date), na.rm = TRUE))