首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从R中的两个数据帧中选择参考日期之后的最近日期

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

Stack Overflow用户
提问于 2020-02-07 14:58:26
回答 1查看 140关注 0票数 2

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

我使用lubridate、tidyverse和dplyr。

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

代码语言:javascript
复制
patient_id      diagnosis_date
1               2018-06-26
2               2014-10-15
3               2016-02-19
4               2018-06-30

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

代码语言:javascript
复制
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

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

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

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

如果你能帮忙,我将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-02-07 15:04:50

使用dplyr的一种方法是通过"patient_id"连接a1a2,基于mri_date对它们执行arrange操作,然后选择mri_date大于diagnosis_date的第一行。

代码语言:javascript
复制
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

data

代码语言:javascript
复制
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")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60108551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档