如何解决如何计算每天出院率和人数?
我想知道如何计算每天的患者人数,它想包括当天出院的患者,但包括入院的患者。 所以,7/17 应该找不到病人 c。
谢谢你帮助我。
install.packages("lubridate")
library(lubridate)
admission <- c("06/23/2013","06/30/2013","07/12/2014","06/24/2013","06/28/2013","06/29/2013","06/23/2013","06/24/2013")
discharge<- c("06/25/2013","07/03/2013","07/17/2014","07/02/2013","06/27/2013")
patient<-c("a","b","c","d","e","f","g","h","j")
admission.date <- mdy(admission)
discharge.date <- mdy(discharge)
df<-data.frame(patient,admission.date,discharge.date)
df
patient admission.date discharge.date
1 a 2013-06-23 2013-06-25
2 b 2013-06-30 2013-07-02
3 c 2014-07-12 2014-07-17
4 d 2013-06-24 2013-06-30
5 e 2013-06-28 2013-06-30
6 f 2013-06-29 2013-07-02
7 g 2013-06-23 2013-06-29
8 h 2013-06-24 2013-06-29
9 j 2013-06-24 2013-06-27
解决方法
这是一种使用 data.table
library(data.table)
# set df to data.table format
setDT(df)
# Create a table with all dates
dt.dates <- data.table( date = seq(min(df$admission.date),max(df$discarge.date),by = "1 days") )
# perform overlap join
answer <- df[dt.dates,.(date,patient),on = .(admission.date <= date,discarge.date > date),nomatch = 0L]
# get unique patients by date
answer[,.(patients = uniqueN(patient)),by = date]
# date patients
# 1: 2013-06-23 2
# 2: 2013-06-24 5
# 3: 2013-06-25 4
# 4: 2013-06-26 4
# 5: 2013-06-27 3
# 6: 2013-06-28 4
# 7: 2013-06-29 3
# 8: 2013-06-30 2
# 9: 2013-07-01 2
#10: 2013-07-02 1
#11: 2014-07-12 1
#12: 2014-07-13 1
#13: 2014-07-14 1
#14: 2014-07-15 1
#15: 2014-07-16 1
,
这是一种使用 dplyr
的方法:
library(dplyr)
df %>%
rowwise() %>%
do(data.frame(patient=.$patient,Date=seq(.$admission.date,.$discarge.date-1,by="day"))) %>%
group_by(Date) %>%
summarize(patients = n())
有输出:
# A tibble: 15 x 2
Date patients
<date> <int>
1 2013-06-23 2
2 2013-06-24 5
3 2013-06-25 4
4 2013-06-26 4
5 2013-06-27 3
6 2013-06-28 4
7 2013-06-29 3
8 2013-06-30 2
9 2013-07-01 2
10 2013-07-02 1
11 2014-07-12 1
12 2014-07-13 1
13 2014-07-14 1
14 2014-07-15 1
15 2014-07-16 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。