计算再入院率

时间:2017-06-12 20:56:47

标签: r

我试图计算2015年访问急诊科(ED)的患者的30天和180天再入院率,但我不太清楚我该怎么办。< / p>

我的数据框看起来像这样:

Visit # |Patient # | Admission Date | Discharge date
   1       1         2015/01/01        2015/01/02
   2       2         2015/01/01        2015/01/01         
   3       3         2015/01/01        2015/01/02
   4       1         2015/01/09        2015/01/09                                       
   5       2         2015/04/01        2015/04/05
   6       1         2015/05/01        2015/05/01

我希望有两个额外的列带有二进制变量[0,1],表明患者是否在30天和/或60天内再次入院。 在上面的例子中,患者1来到ED 3次,1月2次,5月再次,因此我希望readmit30 = 1和readmit180 = 1.患者2来了2次,1月份一次和1次在4月,因此readmit30 = 0和readmit60 = 1。 样本解决方案:

Visit # |Patient #| Admission Date | Discharge date | readmit30 | readmit180
   1       1        2015/01/01        2015/01/02        1          1
   2       2        2015/01/01        2015/01/01        0          1 
   3       3        2015/01/01        2015/01/02        0          0
   4       1        2015/01/09        2015/01/09        1          1                               
   5       2        2015/04/01        2015/04/05        0          1
   6       1        2015/05/01        2015/05/01        1          1

我的数据集约有2000次访问,约有1500名患者。 任何帮助表示赞赏。

谢谢!

1 个答案:

答案 0 :(得分:2)

我实际上做了这么多:我发现的最好的方法是使用people.sorted{ $0.id < $1.id } people.sorted{ $0.id > $1.id } people.sorted{ $0.picture < $1.picture } people.sorted{ $0.picture > $1.picture } people.sorted{ $0.firstName < $1.firstName } people.sorted{ $0.firstName > $1.firstName } people.sorted{ $0.lastName < $1.lastName } people.sorted{ $0.lastName > $1.lastName } 。我们假设您的数据保存为data.table,然后:

ds

这导致

s <- read.table(text = "Visit Patient Admission Discharge
1 1 2015/01/01 2015/01/02
2 2 2015/01/01 2015/01/01         
3 3 2015/01/01 2015/01/02
4 1 2015/01/09 2015/01/09                                       
5 2 2015/04/01 2015/04/05
6 1 2015/05/01 2015/05/01", header = T, sep = "")

s$Admission <- as.POSIXct(s$Admission, format = "%Y/%m/%d")
s$Discharge <- as.POSIXct(s$Discharge, format = "%Y/%m/%d")

ds <- data.table(s)

setkey(ds, Patient, Admission)
ds <- ds[ , Daydiff := as.numeric(difftime(shift(Admission, n = 1L, fill = 999, type = "lead"), Discharge)), 
          by = "Patient"][ ,':='(Readmit30 = ifelse(abs(Daydiff) <= 30, 1, 0), 
                                 Readmit180= ifelse(abs(Daydiff) <= 180, 1, 0),
                                 Daydiff   = NULL)]

请记住,这只会确定哪些记录有30天或180天的重新接收,而不是哪些记录实际上是30天或180天的重新接收。