从 R 中的两个数据框中选择参考日期之后的最近日期

Posted

技术标签:

【中文标题】从 R 中的两个数据框中选择参考日期之后的最近日期【英文标题】:Select the most recent date after the reference date from two dataframes in R 【发布时间】:2020-05-23 07:13:38 【问题描述】:

我正在使用 R,我有两个数据集,一个包含参考日期(癌症诊断日期),另一个包含扫描日期。一些患者在诊断日期前后进行了多次扫描。我需要在诊断日期之后进行第一次扫描。然后我计划合并数据集,以便我们可以分析数据框中的其他数据(未描述)。

我正在使用 lubridate、tidyverse 和 dplyr。

第一个数据集“a1”的结构是:

patient_id      diagnosis_date
1               2018-06-26
2               2014-10-15
3               2016-02-19
4               2018-06-30

第二个数据“a2”集的结构:

patient_id      mri_date
1               2018-04-19
1               2018-07-12
1               2018-08-11
2               2014-11-01
3               2016-02-25
3               2018-10-07

我想为每个患者 ID 选择诊断日期 mri_date>=diagnosis_date 之后的第一次扫描。例如。患者 1 的 mri_date 2018-07-12。

我尝试合并数据集combined<-merge(a1,a2,by="patient_id",all.x=TRUE),然后计划进行过滤和切片。但是,这会删除每个患者的多个 mri_date 值,只取第一个。

我尝试过寻找答案,但似乎找不到。

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

使用dplyr 的一种方法是将"patient_id"arrange 基于mri_date 加入a1a2,然后选择mri_date 大于diagnosis_date 的第一行。

library(dplyr)

inner_join(a1, a2, by = 'patient_id') %>%
  arrange(patient_id, mri_date) %>%
  group_by(patient_id) %>%
  slice(which.max(mri_date > diagnosis_date))

#  patient_id diagnosis_date mri_date  
#       <int> <date>         <date>    
#1          1 2018-06-26     2018-07-12
#2          2 2014-10-15     2014-11-01
#3          3 2016-02-19     2016-02-25

数据

a1 <- structure(list(patient_id = 1:4, diagnosis_date = structure(c(17708, 
16358, 16850,17712), class = "Date")), row.names = c(NA, -4L), class = "data.frame")

a2 <- structure(list(patient_id = c(1L, 1L, 1L, 2L, 3L, 3L), mri_date = 
structure(c(17640, 17724, 17754, 16375, 16856, 17811), class = "Date")), 
row.names = c(NA,-6L), class = "data.frame")

【讨论】:

以上是关于从 R 中的两个数据框中选择参考日期之后的最近日期的主要内容,如果未能解决你的问题,请参考以下文章

是否有一个 R 函数可以计算自数据框中最近日期以来的天数?

如何基于相同的 ID 比较两个不同数据框中的日期列

如何根据日期时间约束从另一个数据框中提取行?

是否有一个 R 函数可以根据条件计算数据框中先前日期的数量

选择连接表上的最近日期

如何在R中的数据框中转换日期/时间列