我正在尝试使用 R 中的 reclin2 包根据事件时间链接 2 个医疗保健数据集。因为时间没有准确记录在两个数据集中,所以我必须使用时间间隔,但这会导致问题与 recline2::pair_blocking() 一起使用,因为它不会基于 %within% 关系创建对。另外,因为数据有时会跨越午夜,所以我不能只使用日期。
不幸的是,由于数据质量差,无法通过其他数据(性别、年龄等)点进行匹配。
每个实际数据集都有超过 30 000 个案例,其中一些案例没有配对,因此解决方案需要高效地提高 CPU 使用率。
下面是一个示例问题集,其中 X 中的情况 1 应与 Y 中的情况 1 配对,X 中的情况 2 应与 Y 中的情况 2 配对,....
library(lubridate)
#Dataset X
case.x<- c(1,2,3,4)
Event_time<- c("1/2/23 14:56:00", "4/5/23 23:56:00", "7/6/23 00:42:00", "2/5/23 05:06:00")
Location<- c( "A", "B", "A", "B")
X<- data.frame(case.x,Event_time, Location)
X$Event_time<-dmy_hms(Event_time)
#Dataset Y
case.y<- c(1,2,3,4)
event_range_start<- c("1/2/23 13:56:00", "4/5/23 22:56:00", "6/6/23 23:42:00", "2/5/23 04:06:00")
event_range_end<- c("1/2/23 15:56:00", "5/5/23 00:56:00", "7/6/23 01:42:00", "2/5/23 06:06:00")
Location<- Location<- c( "A", "B", "A", "B")
Y<- data.frame(case.y,event_range_start,event_range_end, Location)
Y$event_range<- interval(dmy_hms(Y$event_range_start), dmy_hms(Y$event_range_end))
我正在寻找基于时间范围的阻塞对问题的解决方案,最好使用reclin2,但如果需要,可以考虑其他概率链接包。
这是一种基于您提供的信息的方法。请注意,我已经修改了 Y 中的最后一个 event_range_end 值以显示它的工作原理:
library(lubridate)
library(dplyr)
#Dataset X
case.x<- c(1,2,3,4)
Event_time <- c("1/2/23 14:56:00",
"4/5/23 23:56:00",
"7/6/23 00:42:00",
"2/5/23 05:06:00")
Location <- c( "A", "B", "A", "B")
X <- data.frame(case.x, Event_time, Location)
X$Event_time <- dmy_hms(Event_time)
#Dataset Y
case.y<- c(1,2,3,4)
event_range_start <- c("1/2/23 13:56:00",
"4/5/23 22:56:00",
"6/6/23 23:42:00",
"2/5/23 04:06:00")
event_range_end <- c("1/2/23 15:56:00",
"5/5/23 00:56:00",
"7/6/23 01:42:00",
"2/5/23 05:05:00")
Location <- Location<- c( "A", "B", "A", "B")
Y <- data.frame(case.y, event_range_start, event_range_end, Location)
Y$event_range_start <- dmy_hms(Y$event_range_start)
Y$event_range_end <- dmy_hms(Y$event_range_end)
# Join X and Y and filter based on event range columns
df <- X %>%
left_join(Y, by = join_by(case.x == case.y),
suffix = c("", ".y")) %>%
filter(Event_time >= event_range_start &
Event_time <= event_range_end) %>%
select(-ends_with(".y"))
df
case.x Event_time Location event_range_start event_range_end
1 1 2023-02-01 14:56:00 A 2023-02-01 13:56:00 2023-02-01 15:56:00
2 2 2023-05-04 23:56:00 B 2023-05-04 22:56:00 2023-05-05 00:56:00
3 3 2023-06-07 00:42:00 A 2023-06-06 23:42:00 2023-06-07 01:42:00