我有几个诊所的入院和出院数据,并需要确定是否存在两个或更多患者在同一诊所以及相同病原体DNA菌株下的重叠入院情况。使用R处理。
只有5个变量:研究ID、入院日期、出院日期、DNA菌株和诊所。每行是一个单独的访问,这意味着 "ID" 变量可能会重复。我需要确定有多少"重叠",也就是说,相同病原体DNA的患者在同一时间在同一诊所。
这似乎是一个简单的问题,在这个网站上也被广泛讨论过。当每个ID都是唯一的时,我能够识别重叠。我的具体问题是如何处理重复的ID。在下面的代码中,我提供了样本数据和我的代码,在每个ID都是唯一的情况下可以工作(通过将代码第一行的
我知道重叠日期间隔是一个广泛讨论的主题,所以请相信我已经彻底查看了我能找到的所有内容,除了这最后一部分。非常感谢您的任何建议。
谢谢!
只有5个变量:研究ID、入院日期、出院日期、DNA菌株和诊所。每行是一个单独的访问,这意味着 "ID" 变量可能会重复。我需要确定有多少"重叠",也就是说,相同病原体DNA的患者在同一时间在同一诊所。
这似乎是一个简单的问题,在这个网站上也被广泛讨论过。当每个ID都是唯一的时,我能够识别重叠。我的具体问题是如何处理重复的ID。在下面的代码中,我提供了样本数据和我的代码,在每个ID都是唯一的情况下可以工作(通过将代码第一行的
seq(1:20)),each=2)
更改为seq(1:40)),each=1)
,您可以快速测试此代码)。如果我使用重复的ID运行此代码,则标记所有访问为重叠= 1,而不管它实际上是否重叠的访问。我知道重叠日期间隔是一个广泛讨论的主题,所以请相信我已经彻底查看了我能找到的所有内容,除了这最后一部分。非常感谢您的任何建议。
谢谢!
#Set globals
set.seed(8126)
library(lubridate); library(data.table)
#Example Data
have<-data.frame(rep(paste0("k",seq(1:20)),each=2),sample(seq(as.Date('2015/01/01'), as.Date('2020/01/01'), by="day"), 40))
names(have)<-c("id","datein")
have$dateout<-have$datein+40 #arbitrarily add 40 days to admission date
have$dnastrain<-as.vector(replicate(20,rep(sample(c("Type 1","Type 2","Type 3"),1),each=2)))
have$clinic<-sample(c("A","B","C","D"),40, replace=TRUE)
#Code that works if each ID is unique
setDT(have); setkey(have,datein, dateout) #Convert to DT and set date in/out as keys
overlaps<-unique(foverlaps(have, have)[id!=i.id & dnastrain==i.dnastrain & clinic==i.clinic, id]) #find overlaps
have[,`:=`(overlap=0)][id %in% overlaps, overlap:=1][order(datein)] #Identify overlaps