同一时间在院人次频数统计 R seq.Date()

2022-06-16  本文已影响0人  努力学习的消炎药

问题描述,需要统计一下,每一天在院的病人数,作为衡量临床医生工作量的一个指标,每天管理的病人数>15(没有上线),该天为达标,满足一个单元,为啥这样只计数不考虑工作难度,不在讨论范围之内。

拿到科密整理的数据后,如下,有关于该医生在科室从2017年到2021年所有治疗的治疗患者的看病记录,内容有患者ID,姓名,出入院时间。根据题目,出入院时间才是我们重点考虑的对象。

首先使用excel处理,在检索一番后 没有找到相应的处理办法,但是知乎上有个回答提示了我,’想知道每天有多少个人,让他们打卡不就行了‘  就想到用R处理一下。

嗯,对让每个病人打卡!

首先,导入数据(没示例数据,自己生成个搞搞也不费事)

rm(list = ls())

library(data.table)

dat = data.frame(fread('khs.csv'))

dat = dat[,c(1,3,4)] #提取需要的列,id,入院时间,出院时间。

as.Date(dat$begin.time)  可以将数据转换为日期形式的数据

dat$begin.time = as.Date(dat$begin.time)

dat$end = as.Date(dat$end)

dat$id = as.character(dat$id)

dat$days = dat$end - dat$begin.time

save(dat,file = 'dat.Rdata')

此时我们已经获取了data形式的数据结构。就可以让他们打卡了。

tpm = seq.Date(from = dat$begin.time[1],to = dat$end[1],by = "day")

核心函数为seq.Date() 基础包的一个函数。可以从开始日期,到结束日期生成期间的每一天的一个时间序列。注意,要提前把NA和不符合日期结构的数据剔除一下,不然就该无限报错了。

然后写个循环,搞个list,把所有的患者都依次打卡一下

rm(list = ls())

load('dat.Rdata')

temp = list()

# dat = dat[-851,] #去除的一个NA值,报错搞了好久

for (i in 1:nrow(dat)) {

  # i = 1

  tpm = seq.Date(from = dat$begin.time[i],to = dat$end[i],by = "day")

  tpm  <- data.frame(seqtime =tpm )

  temp[[i]] = tpm

  }

dat_all = do.call(rbind,temp)

在这个list里面我们只保存了每个患者在院的每一天的日期,我们将每一天汇总到一起。

dat1 = data.frame(table(dat_all$seqtime))

colnames(dat1) = c('date','count')

对结果进行统计就得到了我们最想知道每天有多少人。

write.csv(dat1,file = '20220616.csv',row.names = F,col.names = T)

save(dat1,file = 'dat_all.Rata')

dat2 = dat1[dat1$count>=15,]

length(dat2$date)

[1] 1063

然后把每天都大于等于15 人的天数挑出来,就得到了想要的结果。然后交给领导就行了,交之前记得美化一下。

欸,本来想复制一下就能传过来,结果简书丑的一批,看我的语雀吧

https://www.yuque.com/docs/share/bcf42abb-ebe7-455f-a3a5-855898def2ef?#

上一篇 下一篇

猜你喜欢

热点阅读