这波操作主要涉及将his系统中,根据医生分组分别导出病人信息数据excel进行合并,计算各分组的平均床位日和总床日。涉及 dplyr中的bind_rows,select,mutate,filter,summarise等函数。
library(tidyverse)
library(XLConnectJars)
library(XLConnect)
使用的导入包没有使用readxl,而是用XLconnect,XLConnectJars为其依赖包,这个包支持Excel文件的读和写操作,readxl好像不能写入Excel的,或者说我不太了解这一个功能。
G1 <- readWorksheetFromFile("1.xls",1)
G2 <- readWorksheetFromFile("2.xls",1)
G3 <- readWorksheetFromFile("3.xls",1)
G4 <- readWorksheetFromFile("4.xls",1)
G5 <- readWorksheetFromFile("5.xls",1)
G6 <- readWorksheetFromFile("6.xls",1)
G <- bind_rows(Group1=G1,Group2=G2,Group3=G3,Group4=G4,Group5=G5,Group6=G6,.id="group")
使用dplyr包的bind_rows进行多个数据框的行拼接,类似于rbind,但是bind_rows可以自动添加拼接文件的标记,这样有利于我们后面根据该标记进行分类汇总。
Data frame identifier.
When .id is supplied, a new column of identifiers is created to link each row to its original data frame. The labels are taken from the named arguments to bind_rows(). When a list of data frames is supplied, the labels are taken from the names of the list. If no names are found a numeric sequence is used instead.
head(G1)
head(G2)
G %>% slice(c(1:5,86:90,211:216)) #列举前三组的几行数据,可以观察到group变量的情况
利用dplyr包,选取我们感兴趣的几列,病人编号、病人姓名、入院日期、出院日期、分组,选取入院时期和出院日期是为了计算床位日
计算两个时间点的间隔时间用difftime函数,有一个units变量,可以确定下间隔时间以天(days),年(years),月(months)来衡量,我们床位日一般为天来度量单位。
difftime(time1, time2, tz,
units = c("auto", "secs", "mins", "hours",
"days", "weeks"))
G_select <- G %>% select(BRBH,BRXM,RYRQ,CYRQ,group) %>% mutate(Duration_time=difftime(CYRQ,RYRQ,units = "days"))
DurationTime <-G_select %>%
group_by(group) %>%
summarise(averagetime = mean(Duration_time),totaltime=sum(Duration_time)) #计算各组平均床位日及总床日