使用R中另一个变量的过滤器计算两个事件之间的持续时间



我有一个df,其中我需要计算一长串可能事件中两种类型事件之间的天数,例如,对于给定的唯一id,过量服用"a_type_event"和临床会话"C_type_event",其中事件a总是在事件C:之前

df<- tribble(
~ unique_id, ~event_type, ~ event_date,
'id_101', 'A_type_event', '2022-01-01',
'id_101', 'B_type_event', '2022-02-01',
'id_101', 'A_type_event', '2022-02-15',
'id_101', 'A_type_event', '2022-02-28',
'id_101', 'B_type_event', '2022-03-01',
'id_101', 'C_type_event', '2022-03-10',
'id_101', 'A_type_event', '2022-03-20',
'id_101', 'C_type_event', '2022-04-01'
)

实际的df有20多种事件类型,我需要根据字符串进行筛选(例如,包含"a_type"(。如何计算每个"A_type_event"和下一个由唯一id分组的"C_type_events"之间的天数?

所需输出为:

df2<- tribble(
~ unique_id, ~event_type_A, ~ event_date_A, ~event_type_C, ~event_date_C, ~days_between
'id_101', 'A_type_event', '2022-01-01','C_type_event', '2022-03-10',68 
)

使用dplyr的开发版本(目前为v1.0.99.9000(,我们可以进行非equi连接,以获得未来的第一个匹配:

编辑新数据和规范

#devtools::install_github("tidyverse/dplyr")
library(dplyr)
left_join(
df %>% filter(event_type == "A_type_event"),  # match A_type_event
df %>% filter(event_type == "C_type_event"),   # with C_type_event
#join_by(event_date < event_date),          # where A_type_event before C_type_event
join_by(unique_id, event_date < event_date), # ... and unique id matches
multiple = "first")                        # and just keep first match

# A tibble: 4 × 5
unique_id event_type.x event_date.x event_type.y event_date.y
<chr>     <chr>        <chr>        <chr>        <chr>       
1 id_101    A_type_event 2022-01-01   C_type_event 2022-03-10  
2 id_101    A_type_event 2022-02-15   C_type_event 2022-03-10  
3 id_101    A_type_event 2022-02-28   C_type_event 2022-03-10  
4 id_101    A_type_event 2022-03-20   C_type_event 2022-04-01  

最新更新