首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算R区连续医院的住院时间

如何计算R区连续医院的住院时间
EN

Stack Overflow用户
提问于 2022-03-07 23:56:16
回答 1查看 116关注 0票数 1

我有一个记录病人入院情况的数据集。因此,每一份记录都有病人身份、入院日期和出院日期。病人可以在同一天出院,并在同一天再次住院到单独的医院、单独的病房或病人可以在最初记录的出院日期(嵌套转移)之前进入另一家医院。我正在尝试创建一个变量,用于计算连续的住院期间,其中包括连续转移(入院日期等于前一个出院日期)、重叠转移(前一个出院日期之前的入院日期)和嵌套转诊作为住院时间的单个插曲。下面是示例数据。

代码语言:javascript
复制
library (tidyverse)
library (lubridate)
record_no <- seq(1:16)
id <- c(1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2)
adm_date<- c("14 dec 2012", "10 jan 2013", "19 march 2013", "9 april 2013", "3 may 2013", 
             "24 May 2013", 
             "7 June 2013", "23 Jul 2013", "7 Nov 2014", "23 feb 2015", "13 March 2015", 
             "1 April 2015", "7 Nov 2014", "23 feb 2015", "13 March 2015", 
             "1 April 2015")
dis_date<- c("14 dec 2012", "19 jan 2013",  "9 april 2013", "3 may 2013", "24 May 2013", 
             "4 June 2013", "24 Jul 2013", "7 Nov 2014", "23 feb 2015", "13 March 2015", "1 April 2015" ,
             "3 april 2015", "23 feb 2015", "13 March 2015", "1 April 2015" ,
             "3 april 2015")

ami_data <- data.frame(record_no, id, adm_date, dis_date, ) %>% 
  mutate (adm_date=dmy(adm_date), dis_date=dmy(dis_date)) 

我可以通过group_by通过id计算每个病人的“转移”或出院的数量。

代码语言:javascript
复制
morb_seq <- ami_data %>% 
  arrange(id, adm_date, dis_date) %>% 
  group_by(id) %>% 
  mutate(morbseq=seq(id)) %>% 
  ungroup  
 kable(morb_seq)


>     | record_no| id|adm_date   |dis_date   | morbseq|
>     |---------:|--:|:----------|:----------|-------:|
>     |         1|  1|2012-12-14 |2012-12-14 |       1|
>     |         2|  1|2013-01-10 |2013-01-19 |       2|
>     |         3|  1|2013-03-19 |2013-04-09 |       3|
>     |         4|  1|2013-04-09 |2013-05-03 |       4|
>     |         5|  1|2013-05-03 |2013-05-24 |       5|
>     |         6|  1|2013-05-24 |2013-06-04 |       6|
>     |         7|  1|2013-06-07 |2013-07-24 |       7|
>     |         8|  1|2013-07-23 |2014-11-07 |       8|
>     |         9|  1|2014-11-07 |2015-02-23 |       9|
>     |        10|  1|2015-02-23 |2015-03-13 |      10|
>     |        11|  1|2015-03-13 |2015-04-01 |      11|
>     |        12|  1|2015-04-01 |2015-04-03 |      12|
>     |        13|  2|2014-11-07 |2015-02-23 |       1|
>     |        14|  2|2015-02-23 |2015-03-13 |       2|
>     |        15|  2|2015-03-13 |2015-04-01 |       3|
>     |        16|  2|2015-04-01 |2015-04-03 |       4|

病人1出院12次,但实际上连续住院4次(连续4次:1、2、3-6和7-12)。因此,我想做的是,对于第3至6号记录,最后的分离日期是2013年- 6 -4,因此这一特定事件的停留时间(包括四个单独的分离日期)将是接纳日期(2013-03-19)和最终分离日期(2013-6-04)之间的区别,而第7-12号记录的最后释放日期为2015-4-01。如果我group_by id,并采取max(dis_date),我得到2015-4-03,这是最后一个出院日期的病人整体。

我在R里怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-08 00:37:27

这可能对你有帮助。

代码语言:javascript
复制
morb_seq %>% 
  group_by(id) %>% 
  mutate(new_stay = as.numeric(adm_date-lag(dis_date))>0,
         stay_no = cumsum(if_else(is.na(new_stay),TRUE,new_stay))) %>% 
  group_by(id,stay_no) %>%
  mutate(discharge_date=max(dis_date)) %>% 
  ungroup() %>% 
  select(!new_stay:stay_no)

输出:

代码语言:javascript
复制
   record_no    id adm_date   dis_date   morbseq discharge_date
       <int> <dbl> <date>     <date>       <int> <date>        
 1         1     1 2012-12-14 2012-12-14       1 2012-12-14    
 2         2     1 2013-01-10 2013-01-19       2 2013-01-19    
 3         3     1 2013-03-19 2013-04-09       3 2013-06-04    
 4         4     1 2013-04-09 2013-05-03       4 2013-06-04    
 5         5     1 2013-05-03 2013-05-24       5 2013-06-04    
 6         6     1 2013-05-24 2013-06-04       6 2013-06-04    
 7         7     1 2013-06-07 2013-07-24       7 2015-04-03    
 8         8     1 2013-07-23 2014-11-07       8 2015-04-03    
 9         9     1 2014-11-07 2015-02-23       9 2015-04-03    
10        10     1 2015-02-23 2015-03-13      10 2015-04-03    
11        11     1 2015-03-13 2015-04-01      11 2015-04-03    
12        12     1 2015-04-01 2015-04-03      12 2015-04-03    
13        13     2 2014-11-07 2015-02-23       1 2015-04-03    
14        14     2 2015-02-23 2015-03-13       2 2015-04-03    
15        15     2 2015-03-13 2015-04-01       3 2015-04-03    
16        16     2 2015-04-01 2015-04-03       4 2015-04-03 

如果您想将其折叠为每一次停留的一行,则可以将其缩短为:

代码语言:javascript
复制
morb_seq %>% 
  group_by(id) %>% 
  mutate(new_stay = as.numeric(adm_date-lag(dis_date))>0,
         stay_no = cumsum(if_else(is.na(new_stay),TRUE,new_stay))) %>% 
  group_by(id,stay_no) %>%
  summarize(discharge_date=max(dis_date))

输出:

代码语言:javascript
复制
     id stay_no discharge_date
  <dbl>   <int> <date>        
1     1       1 2012-12-14    
2     1       2 2013-01-19    
3     1       3 2013-06-04    
4     1       4 2015-04-03    
5     2       1 2015-04-03  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71388549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档