knitr::opts_chunk$set(fig.width=14, fig.height=10, dpi=200)
if(unit=="week"){ admissionsWeekly<-admissionData %>% dplyr::mutate(outcomeKnown=ifelse(is.na(outcomeKnown) | outcomeKnown==0,0,1)) %>% dplyr::group_by(week=cut(ymd(admissionData$data_date),"week",start.on.monday=TRUE),.drop=F) %>% dplyr::summarise(n=sum(!is.na(pidAdm)),nOutcomeKnown=sum(outcomeKnown==1)) %>% pivot_longer(cols=-week,names_to="countType",values_to="n") # outcome data needs to be taken from the daily data admissionsWeekly$countType<-factor(admissionsWeekly$countType,levels=c("n","nOutcomeKnown")) admissionsWeekly %>% filter(is.element(el=ymd(week),set=ymd(curPeriod))) %>% ggplot(mapping=aes(x=week,y=n,fill=countType)) + geom_bar(position="dodge",stat="identity") + scale_fill_manual(values=wes_palette("Zissou1",n=4,type="discrete")[c(1,4)],name="",labels=c("admitted","outcome recorded")) + ylab("Frequency") + theme_minimal() + theme(legend.position="top",text=element_text(size=28),axis.text.x=element_text(angle = 30, hjust = 1)) + xlab("Week") }else if(unit=="month"){ admissionsMonthly<-admissionData %>% dplyr::mutate(outcomeKnown=ifelse(is.na(outcomeKnown) | outcomeKnown==0,0,1)) %>% dplyr::group_by(month=cut(ymd(admissionData$data_date),"month"),.drop=F) %>% dplyr::summarise(n=sum(!is.na(pidAdm)),nOutcomeKnown=sum(outcomeKnown==1)) %>% pivot_longer(cols=-month,names_to="countType",values_to="n") # outcome data needs to be taken from the daily data admissionsMonthly$countType<-factor(admissionsMonthly$countType,levels=c("n","nOutcomeKnown")) admissionsMonthly %>% filter(is.element(el=ymd(month),set=ymd(curPeriod))) %>% dplyr::mutate(month=format_ISO8601(ymd(month),precision="ym")) %>% ggplot(mapping=aes(x=month,y=n,fill=countType)) + geom_bar(position="dodge",stat="identity") + scale_fill_manual(values=wes_palette("Zissou1",n=4,type="discrete")[c(1,4)],name="",labels=c("admitted","outcome recorded")) + ylab("Frequency") + theme_minimal() + theme(legend.position="top",text=element_text(size=28),axis.text.x=element_text(angle = 30, hjust = 1)) + xlab("Month") }
r minDay
to r maxDay
)admissionDataSex <- admissionDataCurPeriod %>% select(pidAdm,data_date,agegrp,sexFactor) %>% dplyr::group_by(sexFactor,agegrp) %>% dplyr::summarise(nadmn = sum(!is.na(pidAdm))) %>% ungroup() %>% tidyr::complete(sexFactor,agegrp,fill=list(nadmn=0)) ggplot(admissionDataSex,aes(agegrp,nadmn,fill=sexFactor)) + geom_bar(position="stack",stat="identity") + xlab("Age at admission") + ylab("Frequency") + theme_minimal() + theme(legend.position="top",text=element_text(size=28)) + scale_fill_manual(values = wes_palette("Zissou1",n=4,type="discrete")[c(1,4)],name="")
if(unit=="week"){ admissionsWeekly<-admissionData %>% dplyr::mutate(outcomeKnown=ifelse(is.na(outcomeKnown),0,1)) %>% dplyr::group_by(week=cut(ymd(admissionData$data_date),"week",start.on.monday=TRUE),.drop=F) %>% dplyr::summarise(n=sum(!is.na(pidAdm)),percOrganSupportOxygen=100*sum(adm1==1)/sum(!is.na(pidAdm)),percOrganSupportFluidBalance=100*sum(adm2==1)/sum(!is.na(pidAdm))) %>% dplyr::filter(is.element(el=ymd(week),set=ymd(curPeriod))) admissionsWeeklyLong <-admissionsWeekly %>% tidyr::pivot_longer(cols=c(percOrganSupportOxygen,percOrganSupportFluidBalance),names_to="percType",values_to="percentage") # outcome data needs to be taken from the daily data admissionsWeeklyLong$percType<-factor(admissionsWeeklyLong$percType,levels=c("percOrganSupportOxygen","percOrganSupportFluidBalance")) admissionsWeekly<-admissionsWeekly %>% dplyr::mutate( maxPerc=pmax(percOrganSupportOxygen,percOrganSupportFluidBalance), nLabel=paste(sep="","n = ",n)) ggplot() + geom_bar(data=admissionsWeeklyLong,mapping=aes(x=week,y=percentage,fill=percType),position="dodge",stat="identity") + scale_fill_manual(values=wes_palette("Zissou1",n=4,type="discrete")[c(1,4)],name="",labels=c("Oxygen support","Fluid balance")) + ylab("Percentage") + theme_minimal() + theme(legend.position="top",text=element_text(size=28),axis.text.x=element_text(angle = 30, hjust = 1)) + xlab("Week") + geom_text(data=admissionsWeekly,mapping=aes(x=week,y=-4,label=nLabel),colour="grey50",size=8) }else if(unit=="month"){ admissionsMonthly<-admissionData %>% dplyr::mutate(outcomeKnown=ifelse(is.na(outcomeKnown),0,1)) %>% dplyr::group_by(month=cut(ymd(admissionData$data_date),"month"),.drop=F) %>% dplyr::summarise(n=sum(!is.na(pidAdm)),percOrganSupportOxygen=100*sum(adm1==1)/sum(!is.na(pidAdm)),percOrganSupportFluidBalance=100*sum(adm2==1)/sum(!is.na(pidAdm))) %>% dplyr::filter(is.element(el=ymd(month),set=ymd(curPeriod))) %>% dplyr::mutate(month=format_ISO8601(ymd(month),precision="ym")) admissionsMonthlyLong <-admissionsMonthly %>% tidyr::pivot_longer(cols=c(percOrganSupportOxygen,percOrganSupportFluidBalance),names_to="percType",values_to="percentage") # outcome data needs to be taken from the daily data admissionsMonthlyLong$percType<-factor(admissionsMonthlyLong$percType,levels=c("percOrganSupportOxygen","percOrganSupportFluidBalance")) admissionsMonthly<-admissionsMonthly %>% dplyr::mutate( maxPerc=pmax(percOrganSupportOxygen,percOrganSupportFluidBalance), nLabel=paste(sep="","n = ",n)) ggplot() + geom_bar(data=admissionsMonthlyLong,mapping=aes(x=month,y=percentage,fill=percType),position="dodge",stat="identity") + scale_fill_manual(values=wes_palette("Zissou1",n=4,type="discrete")[c(1,4)],name="",labels=c("Oxygen support","Fluid balance")) + ylab("Percentage") + theme_minimal() + theme(legend.position="top",text=element_text(size=28),axis.text.x=element_text(angle = 30, hjust = 1)) + xlab("Month") + geom_text(data=admissionsMonthly,mapping=aes(x=month,y=-4,label=nLabel),colour="grey50",size=8) }
admissionDataCurPeriod %>% select(pidAdm,osa1Dur,osa2Dur) %>% tidyr::pivot_longer(cols=-pidAdm,names_to="osType",values_to="duration") %>% dplyr::mutate(osType=factor(ifelse(osType=="osa1Dur","Oxygen administration.","Careful fluid balance."),levels=c("Oxygen administration.","Careful fluid balance."))) %>% dplyr::filter(duration > 0) %>% # this line guarantees that organ support duration is only summarised for individuals that received organ support ggplot(mapping=aes(x=osType,y=duration,fill=osType)) + geom_boxplot() + scale_fill_manual(values=wes_palette("Zissou1",n=4,type="discrete")[c(1,4)]) + theme_minimal() + theme(legend.position="none",text=element_text(size=28)) + xlab("Organ support") + ylab("Duration") + ylim(c(0,max(c(admissionDataCurPeriod$osa1Dur,admissionDataCurPeriod$osa2Dur)))) # ggplot() + # stat_summary( # mapping = aes(x = osType, y = duration, color=osType, lwd=1.75), # fun.min = min, # fun.max = max, # fun = median # ) + # scale_color_manual(values=wes_palette("Zissou1",n=4,type="discrete")[c(1,4)]) + # theme(legend.position="none",text=element_text(size=28)) + # xlab("Organ support") + # ylab("Duration")
sumStatFun<-function(dat,var,groupVar=NULL,groups=NULL,values=NULL,breaks=NULL,rightTF=F,propsByRow=F){ # dat = data frame # var = variable in dat for which the summary statistics are to be computed # groupVar = variable to stratify the summary statistics by and to compute comparison p-values for # values = levels or values (if variable is categorical or discrete) # breaks = breaks to categorise a continuous variable # rightTF = logical, indicating if the intervals should be closed on the right (and open on the left) or vice versa # propsByRow = logical, only used when a groupVar is specified and the variable to be summarised is categorical, if TRUE, then proportions wil be calculated over rows rather than columns if(is.null(groupVar) | is.null(groups)){ dat$tmpGroup<-rep("allSamples",nrow(dat)) groups<-"allSamples" groupVar<-"tmpGroup" } dat<-as.data.frame(dat) # continuous variables if(is.null(values) & is.null(breaks)){ ssFunTmp<-function(dat,var){ res<-data.frame( stat=c("N (%)","mean (SD)","median (IQR)","range"), stat1Val=c(sum(!is.na(dat[,var])),mean(dat[,var],na.rm=T),median(dat[,var],na.rm=T),min(dat[,var],na.rm=T)), stat2Val=c(sum(!is.na(dat[,var]))/nrow(dat),sd(dat[,var],na.rm=T),quantile(dat[,var],probs=0.25,na.rm=T),max(dat[,var],na.rm=T)), stat3Val=c(NA,NA,quantile(dat[,var],probs=0.75,na.rm=T),NA), stringsAsFactors=F) return(res) } res<-ssFunTmp(dat=dat,var=var) colnames(res)<-paste(sep="","overall_",colnames(res)) if(length(groups)>1){ for(g in groups){ if(sum(!is.na(dat[dat[,groupVar]==g,var]))>0){ resTmp<-ssFunTmp(dat=dat[dat[,groupVar]==g,],var=var) colnames(resTmp)<-paste(sep="",g,"_",colnames(resTmp)) res<-cbind(res,resTmp[,-1]) }else{ resTmp<-data.frame(stat1Val=rep(NA,4),stat2Val=NA,stat3Val=NA) colnames(resTmp)<-paste(sep="",g,"_",colnames(resTmp)) res<-cbind(res,resTmp) } } } res$p<-NA if(length(groups)==2){ try(res$p[2]<-t.test(as.formula(paste(sep="~",var,groupVar)),data=dat)$p.value,silent=T) try(res$p[3]<-wilcox.test(as.formula(paste(sep="~",var,groupVar)),data=dat)$p.value,silent=T) }else if(length(groups)>2){ try(res$p[2]<-summary(aov(as.formula(paste(sep="~",var,groupVar)),data=dat))[[1]][1,"Pr(>F)"],silent=T) try(res$p[3]<-kruskal.test(as.formula(paste(sep="~",var,groupVar)),data=dat)$p.value,silent=T) } }else{ # categorical or discrete variables if(!is.null(values)){ tmp<-dat[,var] levels(tmp) # continuous variables to be categorised }else if(!is.null(breaks)){ tmp<-cut(dat[,var],breaks=breaks,right=rightTF,ordered_result=T) } nonMissing<-sum(!is.na(dat[,var])) for(g in groups){nonMissing<-c(nonMissing,sum(!is.na(dat[,var]) & dat[,groupVar]==g))} resCounts<-rbind(nonMissing,cbind(table(tmp),table(tmp,dat[,groupVar]))) resProps<-resCounts if(!propsByRow){ for(j in 1:ncol(resProps)){resProps[-1,j]<-resProps[-1,j]/resProps[1,j]} resProps[1,1]<-resProps[1,1]/nrow(dat) for(j in 1:length(groups)){resProps[1,j+1]<-resProps[1,j+1]/sum(dat[,groupVar]==groups[j])} }else{ for(i in 2:nrow(resProps)){resProps[i,-1]<-resProps[i,-1]/resProps[i,1]} resProps[1,1]<-resProps[1,1]/nrow(dat) for(j in 1:length(groups)){resProps[1,j+1]<-resProps[1,j+1]/sum(dat[,groupVar]==groups[j])} } res<-data.frame(statName="N (%)", overall_count=resCounts[,1], overall_prop=resProps[,1], NA, stringsAsFactors=F) if(length(groups)>1){ for(j in 2:ncol(resProps)){ res<-cbind(res,resCounts[,j],resProps[,j],NA) colnames(res)[(ncol(res)-2):(ncol(res)-1)]<-paste(sep="_",colnames(resCounts)[j],c("count","prop")) } } res$p<-NA if(length(groups)>1){ res$p[2]<-fisher.test(resCounts[-1,-1])$p.value } } return(res) } reformatForTable<-function(sumStatOutput,varDescription,contCat,nsmall=2,groups=NULL){ if(is.null(groups)){ groups<-"overall" }else{ groups<-c("overall",groups) } if(contCat=="continuous"){ varTmp<-c(paste(sep="",varDescription," [n=",as.integer(sumStatOutput[sumStatOutput[,"overall_stat"]=="N (%)","overall_stat1Val"])," (",format(nsmall=1,round(digits=1,100*sumStatOutput[sumStatOutput[,"overall_stat"]=="N (%)","overall_stat2Val"])),"%)]"), " Mean (SD)", " Median (IQR)" ) stat1Tmp<-list() stat2Tmp<-list() for(g in groups){ stat1Tmp[[g]]<-c("", format(nsmall=nsmall,round(digits=2,sumStatOutput[sumStatOutput[,"overall_stat"]=="mean (SD)",paste(sep="_",g,"stat1Val")])), format(nsmall=nsmall,round(digits=2,sumStatOutput[sumStatOutput[,"overall_stat"]=="median (IQR)",paste(sep="_",g,"stat1Val")])) ) stat2Tmp[[g]]<-c("", paste(sep="","(",format(nsmall=nsmall,round(digits=2,sumStatOutput[sumStatOutput[,"overall_stat"]=="mean (SD)",paste(sep="_",g,"stat2Val")])),")"), paste(sep="","(",paste(collapse=",",format(nsmall=nsmall,round(digits=2,unlist(sumStatOutput[sumStatOutput[,"overall_stat"]=="median (IQR)",c(paste(sep="_",g,"stat2Val"),paste(sep="_",g,"stat3Val"))])))),")") ) } }else if(contCat=="categorical"){ varTmp<-c(paste(sep="",varDescription," [n=",as.integer(sumStatOutput["nonMissing","overall_count"])," (",format(nsmall=1,round(digits=1,100*sumStatOutput["nonMissing","overall_prop"])),"%)]"), paste(sep=""," ",rownames(sumStatOutput)[-1]) ) stat1Tmp<-list() stat2Tmp<-list() for(g in groups){ lvls<-rownames(sumStatOutput)[-1] stat1Tmp[[g]]<-c("", sumStatOutput[match(lvls,rownames(sumStatOutput)),paste(sep="_",g,"count")] ) stat2Tmp[[g]]<-c("", paste(sep="","(",format(nsmall=1,round(digits=1,100*sumStatOutput[match(lvls,rownames(sumStatOutput)),paste(sep="_",g,"prop")])),"%)") ) } } res<-data.frame(variable=varTmp) for(g in groups){ res<-res %>% add_column( tmp1=stat1Tmp[[g]], tmp2=stat2Tmp[[g]] ) colnames(res)[colnames(res)=="tmp1"]<-paste(sep="_","stat1",g) colnames(res)[colnames(res)=="tmp2"]<-paste(sep="_","stat2",g) } res[res=="NA"]<-"--" res[res=="(NA)"]<-"(-)" res[res=="(NA,NA)"]<-"(-,-)" res[res=="NaN"]<-"--" res[res=="(NaN%)"]<-"(-)" res[res=="( NaN%)"]<-"(-)" res[res=="( NaN%)"]<-"(-)" res[res=="( NaN%)"]<-"(-)" return(res) } labClean<-function(v){ v<-gsub(v,pattern=" NaN%",replacement="-") v<-gsub(v,pattern=" NaN%",replacement="-") v<-gsub(v,pattern=" NaN%",replacement="-") v<-gsub(v,pattern="NaN%",replacement="-") v<-gsub(v,pattern="NA,NA",replacement="-,-") v<-gsub(v,pattern="NA",replacement="--") v<-gsub(v,pattern="NaN",replacement="--") return(v) }
tbl1<-reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="age"),varDescription="Age at admission in years",contCat="continuous") tbl1<-rbind(tbl1,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="sexFactor",values=levels(admissionDataCurPeriod$sexFactor)),varDescription="Sex, n (%)",contCat="categorical")) tbl1<-rbind(tbl1,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$sexFactor=="Female",],var="pregFactor",values=levels(admissionDataCurPeriod$pregFactor)),varDescription="Pregnancy status, n (% of females)",contCat="categorical")) tbl1<-rbind(tbl1,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="bmiFactor",values=levels(admissionDataCurPeriod$bmiFactor)),varDescription="Body mass index categories, n (%)",contCat="categorical")) varDescIdx<-grep(tbl1$variable,pattern="\\[n=") varDescLabels<-labClean(tbl1[varDescIdx,1]) tbl1<-tbl1[-varDescIdx,] knitr::kable(tbl1,col.names=NULL,row.names=F,caption=paste(sep="","Patient characteristics: demographics (period ",minDay," to ",maxDay,"; total admissions n=",nrow(admissionDataCurPeriod),")")) %>% kableExtra::kable_styling("striped", full_width = F) %>% #add_header_above(c("Demographics" = 1, paste(sep="","Patients to HDRU from ",minDay," to ",maxDay,"[n = ",nrow(admissionData),"]") = 2)) %>% kableExtra::pack_rows(varDescLabels[1], 1, 2) %>% kableExtra::pack_rows(varDescLabels[2], 3, 4) %>% kableExtra::pack_rows(varDescLabels[3], 5, 7) %>% kableExtra::pack_rows(varDescLabels[4], 8, 12)
tbl2<-reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="depFactor",values=levels(admissionDataCurPeriod$depFactor)),varDescription="Dependency prior to admission, n (%)",contCat="categorical") tbl2<-rbind(tbl2,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="hivFactor",values=levels(admissionDataCurPeriod$hivFactor)),varDescription="HIV, n (%)",contCat="categorical")) tbl2<-rbind(tbl2,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="tbFactor",values=levels(admissionDataCurPeriod$tbFactor)),varDescription="TB, n (%)",contCat="categorical")) tbl2<-rbind(tbl2,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="hypFactor",values=levels(admissionDataCurPeriod$hypFactor)),varDescription="Hyptertension, n (%)",contCat="categorical")) tbl2<-rbind(tbl2,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="ccfFactor",values=levels(admissionDataCurPeriod$ccfFactor)),varDescription="Congestive cardiac failure, n (%)",contCat="categorical")) tbl2<-rbind(tbl2,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="strokeFactor",values=levels(admissionDataCurPeriod$strokeFactor)),varDescription="Stroke, n (%)",contCat="categorical")) tbl2<-rbind(tbl2,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="diabetesFactor",values=levels(admissionDataCurPeriod$diabetesFactor)),varDescription="Diabetes, n (%)",contCat="categorical")) varDescIdx<-grep(tbl2$variable,pattern="\\[n=") varDescLabels<-labClean(tbl2[varDescIdx,1]) tbl2<-tbl2[-varDescIdx,] knitr::kable(tbl2,col.names=NULL,row.names=F,caption=paste(sep="","Patient characteristics: medical history (period ",minDay," to ",maxDay,"; total admissions n=",nrow(admissionDataCurPeriod),")")) %>% kableExtra::kable_styling("striped", full_width = F) %>% #add_header_above(c("Demographics" = 1, paste(sep="","Patients to HDRU from ",minDay," to ",maxDay,"[n = ",nrow(admissionData),"]") = 2)) %>% kableExtra::pack_rows(varDescLabels[1], 1, 4) %>% kableExtra::pack_rows(varDescLabels[2], 5, 8) %>% kableExtra::pack_rows(varDescLabels[3], 9, 10) %>% kableExtra::pack_rows(varDescLabels[4], 11, 12) %>% kableExtra::pack_rows(varDescLabels[5], 13, 14) %>% kableExtra::pack_rows(varDescLabels[6], 15, 16) %>% kableExtra::pack_rows(varDescLabels[7], 17, 20)
tbl3<-reformatForTable(nsmall=0,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="news2"),varDescription="NEWS2 score",contCat="continuous")[c(1,3),] tbl3<-rbind(tbl3,reformatForTable(nsmall=0,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="uva"),varDescription="UVA score",contCat="continuous")[c(1,3),]) tbl3<-rbind(tbl3,reformatForTable(nsmall=0,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="pfRatio"),varDescription="PF ratio",contCat="continuous")) tbl3<-rbind(tbl3,reformatForTable(nsmall=0,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="pfRatio",breaks=c(0,13.3,26.7,Inf)),varDescription="PF ratio",contCat="categorical")) tbl3$stat2<-gsub(pattern="\\( ",replacement="\\(",tbl3$stat2) varDescIdx<-grep(tbl3$variable,pattern="\\[n=") varDescLabels<-labClean(tbl3[varDescIdx,1]) tbl3<-tbl3[-varDescIdx,] knitr::kable(tbl3,col.names=NULL,row.names=F,caption=paste(sep="","Patient characteristics: acute severity (period ",minDay," to ",maxDay,"; total admissions n=",nrow(admissionDataCurPeriod),")")) %>% kableExtra::kable_styling("striped", full_width = F) %>% #add_header_above(c("Demographics" = 1, paste(sep="","Patients to HDRU from ",minDay," to ",maxDay,"[n = ",nrow(admissionData),"]") = 2)) %>% kableExtra::pack_rows(varDescLabels[1], 1, 1) %>% kableExtra::pack_rows(varDescLabels[2], 2, 2) %>% kableExtra::pack_rows(varDescLabels[3], 3, 7)
admissionDataCurPeriod$outcome<-factor(case_when( admissionDataCurPeriod$outcome=="Dead"~"Died", admissionDataCurPeriod$outcome=="Alive, discharged"~"Discharged", admissionDataCurPeriod$outcome=="Absconded"~"Absconded", admissionDataCurPeriod$outcome=="Unknown"~"Unknown"), levels=c("Discharged","Died","Absconded","Unknown")) admissionDataCurPeriod<-admissionDataCurPeriod %>% add_column( adm1Factor=factor(ifelse(admissionDataCurPeriod$adm1==1,"Oxygen","No oxygen"),levels=c("Oxygen","No oxygen")), adm2Factor=factor(ifelse(admissionDataCurPeriod$adm2==1,"Fluid balance","No fluid balance"),levels=c("Fluid balance","No fluid balance")), adm3Factor=factor(ifelse(admissionDataCurPeriod$adm3==1,"Neurological observation","No neurological observation"),levels=c("Neurological observation","No neurological observation")), adm4Factor=factor(ifelse(admissionDataCurPeriod$adm4==1,"Intravenous drug (not vasoactive)","No intravenous drug (not vasoactive)"),levels=c("Intravenous drug (not vasoactive)","No intravenous drug (not vasoactive)")), adm5Factor=factor(ifelse(admissionDataCurPeriod$adm5==1,"Intravenous drug (vasoactive)","No intravenous drug (vasoactive)"),levels=c("Intravenous drug (vasoactive)","No intravenous drug (vasoactive)")), adm6Factor=factor(ifelse(admissionDataCurPeriod$adm6==1,"Continuous monitoring","No continuous monitoring"),levels=c("Continuous monitoring","No continuous monitoring")), adm7Factor=factor(ifelse(admissionDataCurPeriod$adm7==1,"Intubation & ventilation","No intubation & ventilation"),levels=c("Intubation & ventilation","No intubation & ventilation")), adm99Factor=factor(ifelse(admissionDataCurPeriod$adm99==1,"Other","No other"),levels=c("Other","No other")), osa1Factor=factor(ifelse(admissionDataCurPeriod$osa1==1,"Oxygen","No oxygen"),levels=c("Oxygen","No oxygen")), osa2Factor=factor(ifelse(admissionDataCurPeriod$osa2==1,"Fluid balance","No fluid balance"),levels=c("Fluid balance","No fluid balance")), osa3Factor=factor(ifelse(admissionDataCurPeriod$osa3==1,"Neurological observation","No neurological observation"),levels=c("Neurological observation","No neurological observation")), osa4Factor=factor(ifelse(admissionDataCurPeriod$osa4==1,"Intravenous drug (not vasoactive)","No intravenous drug (not vasoactive)"),levels=c("Intravenous drug (not vasoactive)","No intravenous drug (not vasoactive)")), osa5Factor=factor(ifelse(admissionDataCurPeriod$osa5==1,"Intravenous drug (vasoactive)","No intravenous drug (vasoactive)"),levels=c("Intravenous drug (vasoactive)","No intravenous drug (vasoactive)")), osa6Factor=factor(ifelse(admissionDataCurPeriod$osa6==1,"Continuous monitoring","No continuous monitoring"),levels=c("Continuous monitoring","No continuous monitoring")), osa7Factor=factor(ifelse(admissionDataCurPeriod$osa7==1,"Intubation & ventilation","No intubation & ventilation"),levels=c("Intubation & ventilation","No intubation & ventilation")), osa8Factor=factor(ifelse(admissionDataCurPeriod$osa8==1,"Other","No other"),levels=c("Other","No other")) ) tbl4<-reformatForTable(nsmall=0,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="outcome",values=levels(admissionDataCurPeriod$outcome)),varDescription="Outcome at the end of critical care, n (%)",contCat="categorical") tbl4<-rbind(tbl4,reformatForTable(nsmall=2,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="LOS"),varDescription="Length of stay",contCat="continuous")[c(1:3),]) tbl4<-rbind(tbl4,reformatForTable(nsmall=2,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[!is.na(admissionDataCurPeriod$outcome) & admissionDataCurPeriod$outcome=="Discharged",],var="LOS"),varDescription=paste(sep="","Length of stay (critical care survivors; N=",sum(!is.na(admissionDataCurPeriod$outcome) & admissionDataCurPeriod$outcome=="Discharged"),")"),contCat="continuous")[c(1:3),]) tbl4<-rbind(tbl4,reformatForTable(nsmall=2,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[!is.na(admissionDataCurPeriod$outcome) & admissionDataCurPeriod$outcome=="Died",],var="LOS"),varDescription=paste(sep="","Length of stay (critical care non survivors; N=",sum(!is.na(admissionDataCurPeriod$outcome) & admissionDataCurPeriod$outcome=="Died"),")"),contCat="continuous")[c(1:3),]) tbl4<-rbind(tbl4,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa1Factor",values=levels(admissionDataCurPeriod$osa1Factor)),varDescription="Organ support (at any time during critical care stay), n (%)",contCat="categorical")[1:2,]) tbl4<-rbind(tbl4,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa2Factor",values=levels(admissionDataCurPeriod$osa2Factor)),varDescription="Organ support (at any time during critical care stay), n (%)",contCat="categorical")[1:2,]) tbl4<-rbind(tbl4,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa3Factor",values=levels(admissionDataCurPeriod$osa3Factor)),varDescription="Organ support (at any time during critical care stay), n (%)",contCat="categorical")[1:2,]) tbl4<-rbind(tbl4,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa4Factor",values=levels(admissionDataCurPeriod$osa4Factor)),varDescription="Organ support (at any time during critical care stay), n (%)",contCat="categorical")[1:2,]) tbl4<-rbind(tbl4,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa5Factor",values=levels(admissionDataCurPeriod$osa5Factor)),varDescription="Organ support (at any time during critical care stay), n (%)",contCat="categorical")[1:2,]) tbl4<-rbind(tbl4,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa6Factor",values=levels(admissionDataCurPeriod$osa6Factor)),varDescription="Organ support (at any time during critical care stay), n (%)",contCat="categorical")[1:2,]) tbl4<-rbind(tbl4,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa7Factor",values=levels(admissionDataCurPeriod$osa7Factor)),varDescription="Organ support (at any time during critical care stay), n (%)",contCat="categorical")[1:2,]) tbl4<-rbind(tbl4,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa8Factor",values=levels(admissionDataCurPeriod$osa8Factor)),varDescription="Organ support (at any time during critical care stay), n (%)",contCat="categorical")[1:2,]) tbl4<-rbind(tbl4,reformatForTable(nsmall=2,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa1Dur>0,],var="osa1Dur"),varDescription="Duration of oxygen support (days)",contCat="continuous")[c(1:3),]) tbl4<-rbind(tbl4,reformatForTable(nsmall=2,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa2Dur>0,],var="osa2Dur"),varDescription="Duration of fluid balance (days)",contCat="continuous")[c(1:3),]) tbl4<-rbind(tbl4,reformatForTable(nsmall=2,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa3Dur>0,],var="osa3Dur"),varDescription="Duration of neurological observation (days)",contCat="continuous")[c(1:3),]) tbl4<-rbind(tbl4,reformatForTable(nsmall=2,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa4Dur>0,],var="osa4Dur"),varDescription="Duration of intravenous drug administration (not vasoactive) (days)",contCat="continuous")[c(1:3),]) tbl4<-rbind(tbl4,reformatForTable(nsmall=2,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa5Dur>0,],var="osa5Dur"),varDescription="Duration of intravenous drug administration (vasoactive) (days)",contCat="continuous")[c(1:3),]) tbl4<-rbind(tbl4,reformatForTable(nsmall=2,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa6Dur>0,],var="osa6Dur"),varDescription="Duration of continuous monitoring (days)",contCat="continuous")[c(1:3),]) tbl4<-rbind(tbl4,reformatForTable(nsmall=2,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa7Dur>0,],var="osa7Dur"),varDescription="Duration of intubation & ventilation (days)",contCat="continuous")[c(1:3),]) tbl4<-rbind(tbl4,reformatForTable(nsmall=2,sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa8Dur>0,],var="osa8Dur"),varDescription="Duration of other organ support (days)",contCat="continuous")[c(1:3),]) varDescIdx<-grep(tbl4$variable,pattern="\\[n=") varDescLabels<-labClean(tbl4[varDescIdx,1]) tbl4<-tbl4[-varDescIdx,] knitr::kable(tbl4,col.names=NULL,row.names=F,caption=paste(sep="","Patient outcomes (period ",minDay," to ",maxDay,"; total admissions n=",nrow(admissionDataCurPeriod),")")) %>% kableExtra::kable_styling("striped", full_width = F) %>% #add_header_above(c("Demographics" = 1, paste(sep="","Patients to HDRU from ",minDay," to ",maxDay,"[n = ",nrow(admissionData),"]") = 2)) %>% kableExtra::pack_rows(varDescLabels[1], 1, 4) %>% kableExtra::pack_rows(varDescLabels[2], 5, 6) %>% kableExtra::pack_rows(varDescLabels[3], 7, 8) %>% kableExtra::pack_rows(varDescLabels[4], 9, 10) %>% kableExtra::pack_rows(varDescLabels[5], 11, 18) %>% kableExtra::pack_rows(varDescLabels[13], 19, 20) %>% kableExtra::pack_rows(varDescLabels[14], 21, 22) %>% kableExtra::pack_rows(varDescLabels[15], 23, 24) %>% kableExtra::pack_rows(varDescLabels[16], 25, 26) %>% kableExtra::pack_rows(varDescLabels[17], 27, 28) %>% kableExtra::pack_rows(varDescLabels[18], 29, 30) %>% kableExtra::pack_rows(varDescLabels[19], 31, 32) %>% kableExtra::pack_rows(varDescLabels[20], 33, 34)
outcomeLvls<-c("Discharged (hospital)","Discharged (critical care), died in hospital","Died in critical care","Discharged (critical care), unknown hospital outcome","Outcome unknown") tbl5<-reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="agegrp",values=levels(admissionDataCurPeriod$agegrp),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "Age",contCat = "categorical",groups=outcomeLvls)[,-c(2:3)] tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="sexFactor",values=levels(admissionDataCurPeriod$sexFactor),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "Sex",contCat = "categorical",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="bmiFactor",values=levels(admissionDataCurPeriod$bmiFactor),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "BMI",contCat = "categorical",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="hivFactor",values=levels(admissionDataCurPeriod$hivFactor),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "HIV status",contCat = "categorical",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="tbFactor",values=levels(admissionDataCurPeriod$hivFactor),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "TB status",contCat = "categorical",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="news2",groupVar="outcomeAliveOrDead",groups=outcomeLvls),varDescription = "NEWS2 score",contCat = "continuous",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="uva",groupVar="outcomeAliveOrDead",groups=outcomeLvls),varDescription = "UVA score",contCat = "continuous",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="LOS",groupVar="outcomeAliveOrDead",groups=outcomeLvls),varDescription = "Length of stay (days)",contCat = "continuous",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa1Factor",values=levels(admissionDataCurPeriod$osa1Factor),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "Organ support (at any time during critical care)",contCat = "categorical",groups=outcomeLvls)[1:2,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa2Factor",values=levels(admissionDataCurPeriod$osa1Factor),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "Organ support (at any time during critical care)",contCat = "categorical",groups=outcomeLvls)[1:2,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa3Factor",values=levels(admissionDataCurPeriod$osa1Factor),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "Organ support (at any time during critical care)",contCat = "categorical",groups=outcomeLvls)[1:2,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa4Factor",values=levels(admissionDataCurPeriod$osa1Factor),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "Organ support (at any time during critical care)",contCat = "categorical",groups=outcomeLvls)[1:2,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa5Factor",values=levels(admissionDataCurPeriod$osa1Factor),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "Organ support (at any time during critical care)",contCat = "categorical",groups=outcomeLvls)[1:2,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa6Factor",values=levels(admissionDataCurPeriod$osa1Factor),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "Organ support (at any time during critical care)",contCat = "categorical",groups=outcomeLvls)[1:2,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa7Factor",values=levels(admissionDataCurPeriod$osa1Factor),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "Organ support (at any time during critical care)",contCat = "categorical",groups=outcomeLvls)[1:2,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod,var="osa8Factor",values=levels(admissionDataCurPeriod$osa1Factor),groupVar="outcomeAliveOrDead",groups=outcomeLvls,propsByRow = T),varDescription = "Organ support (at any time during critical care)",contCat = "categorical",groups=outcomeLvls)[1:2,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa1Dur>0,],var="osa1Dur",groupVar="outcomeAliveOrDead",groups=outcomeLvls),varDescription = "Duration of oxygen support (days)",contCat = "continuous",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa2Dur>0,],var="osa2Dur",groupVar="outcomeAliveOrDead",groups=outcomeLvls),varDescription = "Duration of fluid balance (days)",contCat = "continuous",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa3Dur>0,],var="osa3Dur",groupVar="outcomeAliveOrDead",groups=outcomeLvls),varDescription = "Duration of neurological observation (days)",contCat = "continuous",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa4Dur>0,],var="osa4Dur",groupVar="outcomeAliveOrDead",groups=outcomeLvls),varDescription = "Duration of intravenous drug administration (not vasoactive) (days)",contCat = "continuous",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa5Dur>0,],var="osa5Dur",groupVar="outcomeAliveOrDead",groups=outcomeLvls),varDescription = "Duration of intravenous drug administration (vasoactive) (days)",contCat = "continuous",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa6Dur>0,],var="osa6Dur",groupVar="outcomeAliveOrDead",groups=outcomeLvls),varDescription = "Duration of continuous monitoring (days)",contCat = "continuous",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa7Dur>0,],var="osa7Dur",groupVar="outcomeAliveOrDead",groups=outcomeLvls),varDescription = "Duration of intubation & ventilation (days)",contCat = "continuous",groups=outcomeLvls)[,-c(2:3)]) tbl5<-rbind(tbl5,reformatForTable(sumStatOutput=sumStatFun(dat=admissionDataCurPeriod[admissionDataCurPeriod$osa8Dur>0,],var="osa8Dur",groupVar="outcomeAliveOrDead",groups=outcomeLvls),varDescription = "Duration of other organ support (days)",contCat = "continuous",groups=outcomeLvls)[,-c(2:3)]) varDescIdx<-grep(tbl5$variable,pattern="\\[n=") varDescLabels<-labClean(tbl5[varDescIdx,1]) tbl5<-tbl5[-varDescIdx,] knitr::kable(tbl5,col.names=rep("",ncol(tbl5)),row.names=F,caption=paste(sep="","Patient characteristics by outcome (period ",minDay," to ",maxDay,"; total admissions n=",nrow(admissionDataCurPeriod),")")) %>% kableExtra::kable_styling("striped", full_width = F) %>% #add_header_above(c("Demographics" = 1, paste(sep="","Patients to HDRU from ",minDay," to ",maxDay,"[n = ",nrow(admissionData),"]") = 2)) %>% kableExtra::pack_rows(varDescLabels[1], 1, 5) %>% kableExtra::pack_rows(varDescLabels[2], 6, 7) %>% kableExtra::pack_rows(varDescLabels[3], 8, 12) %>% kableExtra::pack_rows(varDescLabels[4], 13, 16) %>% kableExtra::pack_rows(varDescLabels[5], 17, 18) %>% kableExtra::pack_rows(varDescLabels[6], 19, 20) %>% kableExtra::pack_rows(varDescLabels[7], 21, 22) %>% kableExtra::pack_rows(varDescLabels[8], 23, 24) %>% kableExtra::pack_rows(varDescLabels[9], 25, 32) %>% kableExtra::pack_rows(varDescLabels[17], 33, 34) %>% kableExtra::pack_rows(varDescLabels[18], 35, 36) %>% kableExtra::pack_rows(varDescLabels[19], 37, 38) %>% kableExtra::pack_rows(varDescLabels[20], 39, 40) %>% kableExtra::pack_rows(varDescLabels[21], 41, 42) %>% kableExtra::pack_rows(varDescLabels[22], 43, 44) %>% kableExtra::pack_rows(varDescLabels[23], 45, 46) %>% kableExtra::pack_rows(varDescLabels[24], 47, 48) %>% kableExtra::column_spec(1, width = "15em") %>% kableExtra::column_spec(2, width = "3em") %>% kableExtra::column_spec(3, width = "8em") %>% kableExtra::column_spec(4, width = "3em") %>% kableExtra::column_spec(5, width = "8em") %>% kableExtra::column_spec(6, width = "3em") %>% kableExtra::column_spec(7, width = "8em") %>% kableExtra::column_spec(8, width = "3em") %>% kableExtra::column_spec(9, width = "8em") %>% kableExtra::column_spec(10, width = "3em") %>% kableExtra::column_spec(11, width = "8em") %>% add_header_above(c(" ", "Discharged (hospital)" = 2, "Discharged (critical care), died in hospital" = 2, "Died in critical care" = 2, "Discharged (critical care), outcome unknown" = 2, "Outcome unknown" = 2), align="l")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.