Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计算再入院率_R - Fatal编程技术网

R 计算再入院率

R 计算再入院率,r,R,我试图计算2015年急诊科(ED)患者的30天和180天再入院率,但我不太确定如何做到这一点 我的数据框如下所示: 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/0

我试图计算2015年急诊科(ED)患者的30天和180天再入院率,但我不太确定如何做到这一点

我的数据框如下所示:

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在1月和5月分别3次、2次和1次来ED,因此我希望readmit30=1和readmit180=1。患者2来过两次,一次在一月,一次在四月,因此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名患者。。 感谢您的帮助


谢谢大家!

我实际上经常这样做:我发现最好的方法是使用
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天的重新提交。

欢迎使用。一个可复制的数据集对解决这个问题非常有帮助。这听起来像是在要求对患者id和入院日期进行滚动自加入,其中新的入院日期在旧出院日期的30或60天内。这在
数据表中很容易做到,但是您在base R中的选项可能需要在行上循环。您的意思是
Readmit180
?你最初要求180天再入学,然后再回到60天再入学。是的,我的意思是再入学180天,我刚刚编辑了我最初的问题。谢谢@akash87,你的代码正是我所需要的。谢谢你抽出时间
> ds
   Visit Patient  Admission  Discharge      Daydiff Readmit30 Readmit180
1:     1       1 2015-01-01 2015-01-02      7.00000         1          1
2:     4       1 2015-01-09 2015-01-09    111.95833         0          1
3:     6       1 2015-05-01 2015-05-01 -16556.15510         0          0
4:     2       2 2015-01-01 2015-01-01     89.95833         0          1
5:     5       2 2015-04-01 2015-04-05 -16530.15510         0          0
6:     3       3 2015-01-01 2015-01-02 -16437.19677         0          0