【发布时间】:2020-02-04 23:16:14
【问题描述】:
我有来自多个诊所的入院和出院数据,需要确定同一诊所的 2 名以上具有相同病原体 DNA 菌株的患者在入院时是否存在重叠。在 R 工作。
只有 5 个变量:研究 ID、日期、日期、DNA 菌株和诊所。每行是一次单独的访问,这意味着“ID”变量可以重复。我需要确定有多少“重叠”,这意味着具有相同病原体 DNA 的患者在同一诊所就诊时间。
这是一个(看似)简单的问题,并且在本网站上进行了很多讨论。当每个 ID 都是唯一的时,我能够识别重叠。我的具体问题是如何处理重复的 ID。在下面的代码中,我提供了示例数据和在每个 ID 唯一时有效的代码(您可以通过在代码的第一行将 seq(1:20)),each=2) 更改为 seq(1:40)),each=1) 来快速测试)。如果我使用重复的 ID 运行此代码,它会将所有访问标记为重叠 = 1,对于具有任何重叠的 ID,无论它是否是实际重叠的访问。
我知道重叠的日期间隔是很多讨论的话题,所以请相信我已经彻底查看了我能找到的所有内容,并且几乎除了最后一部分之外。非常感谢任何建议。
谢谢!
#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
【问题讨论】:
标签: r