国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

R markdown在重復(fù)性醫(yī)院統(tǒng)計(jì)分析報(bào)告中的應(yīng)用

2021-01-22 10:24:14葉韻韶
中國醫(yī)院統(tǒng)計(jì) 2020年6期
關(guān)鍵詞:樣式調(diào)用代碼

韓 棟 葉韻韶

1 南方醫(yī)科大學(xué)第三附屬醫(yī)院,510630 廣東 廣州;2 廣州市衛(wèi)生健康技術(shù)鑒定和人才評(píng)估中心,510080 廣東 廣州

統(tǒng)計(jì)報(bào)表與統(tǒng)計(jì)分析報(bào)告是醫(yī)院統(tǒng)計(jì)工作中常見的產(chǎn)出,其中較多工作需周期性完成。撰寫周期性報(bào)告通常在前一份報(bào)告的底稿上修改數(shù)據(jù)、表格、圖片及部分文本,修改過程除了重復(fù)性統(tǒng)計(jì)數(shù)據(jù)外,還需謄寫數(shù)據(jù)、復(fù)制粘貼圖表及修改格式等繁瑣的人工處理工作,易出現(xiàn)筆誤、數(shù)據(jù)引用不當(dāng)、錯(cuò)誤溯源困難等問題。

隨著科研數(shù)據(jù)量的增長,計(jì)算科學(xué)領(lǐng)域提出可重復(fù)性研究[1]的概念,倡導(dǎo)研究數(shù)據(jù)、分析代碼及描述結(jié)果可以隨著研究論文一起發(fā)表,便于對(duì)研究結(jié)論的評(píng)價(jià)以及研究方法的改進(jìn)。隨后基于R語言的rmarkdown軟件包[2-4]和knitr軟件包[5]迅速在計(jì)算科學(xué)領(lǐng)域廣泛應(yīng)用[3],并且逐步發(fā)展為用于重復(fù)性報(bào)告的分析工具,在計(jì)算科學(xué)、教育、咨詢、數(shù)據(jù)分析、報(bào)告呈現(xiàn)等方面均有廣泛應(yīng)用[6-7]。

rmarkdown軟件包將markdown語言與R語言結(jié)合,通過調(diào)用knitr包執(zhí)行文檔中的程序,并通過調(diào)用 pandoc軟件完成markdown文件與輸出格式(如docx、PDF或HTML)的轉(zhuǎn)換。markdown是一種標(biāo)記語言,語法簡潔明了、極易學(xué)習(xí),功能比純文本更加強(qiáng)大,基本可滿足一般文檔排版的需求。

本文擬介紹基于R語言的可重復(fù)性自動(dòng)分析報(bào)告的制作方法,將原始數(shù)據(jù)、統(tǒng)計(jì)分析代碼、統(tǒng)計(jì)分析報(bào)告文本與數(shù)據(jù)引用方式整合為一份文件,以期高效、準(zhǔn)確地完成周期性統(tǒng)計(jì)分析報(bào)告,并以一份簡要的醫(yī)院統(tǒng)計(jì)報(bào)告為例,展示其在醫(yī)院統(tǒng)計(jì)工作中的應(yīng)用。本文所有程序基于R 3.6.1、rmarkdown 2.1、knitr 1.26和ggplot 2 3.2.1。

1 markdown基本語法說明

markdown是一種超輕量級(jí)的標(biāo)記語言,簡潔易懂。囊括了常用格式標(biāo)記方法,包括標(biāo)題、文本樣式、圖片、超鏈接、項(xiàng)目符號(hào)和項(xiàng)目編號(hào)等。

(1) 標(biāo)題

設(shè)置文章段落標(biāo)題可以展示文章的結(jié)構(gòu),markdown中采用#標(biāo)識(shí)文章標(biāo)題的層次,一級(jí)標(biāo)題用#標(biāo)識(shí), 二級(jí)標(biāo)題用##標(biāo)識(shí),依此類推,最大支持六級(jí)標(biāo)題。需注意#與標(biāo)題間應(yīng)采用空格分隔。

(2) 文本樣式

文本樣式為文本寫作中最常用的標(biāo)記,包括粗體、斜體、上下標(biāo)等。具體標(biāo)記方法見表1。

表1 文本樣式基本標(biāo)記語法

(3) 圖片與超鏈接

markdown文件中插入圖片與插入超鏈接類似,對(duì)于存儲(chǔ)在硬盤中的圖片文件,使用![圖片標(biāo)題](圖片地址)進(jìn)行插入。插入超鏈接的代碼為[標(biāo)題](鏈接地址),二者僅相差一個(gè)“!”號(hào)。直接插入R語言生成圖片將在第3節(jié)中進(jìn)行說明。

(4) 項(xiàng)目符號(hào)和編號(hào)

在文字前方添加*、+或-即可實(shí)現(xiàn)項(xiàng)目符號(hào),添加數(shù)字或字母和“.”即可實(shí)現(xiàn)項(xiàng)目編號(hào),注意文字前須留一個(gè)空格進(jìn)行分隔。

(5) 數(shù)學(xué)公式

2 rmarkdown和動(dòng)態(tài)報(bào)告

R語言與markdown結(jié)合的最大優(yōu)勢(shì)是可以將數(shù)據(jù)分析的過程、結(jié)果嵌入到文字的報(bào)告中,根據(jù)分析數(shù)據(jù)的變化或代碼中預(yù)先設(shè)定的條件,可生成動(dòng)態(tài)的報(bào)告。該功能主要依靠rmarkdown軟件包和knitr軟件包實(shí)現(xiàn)。rmarkdown軟件包主要的功能為調(diào)用knitr包和外部的pandoc程序,knitr包負(fù)責(zé)執(zhí)行R代碼并生成符合markdown要求的輸出結(jié)果,pandoc則執(zhí)行相應(yīng)的文檔轉(zhuǎn)換,將嵌入R運(yùn)行結(jié)果的markdown文件轉(zhuǎn)換為PDF、HTML、docx等文件類型。

R markdown文檔分為文檔頭和正文部分,在任意內(nèi)容位置均可使用R代碼運(yùn)算。正文部分按照markdown語法完成報(bào)告內(nèi)容即可。文檔頭部分是基于YAML(YAML ain’t markup language)進(jìn)行表示,由3個(gè)短線分隔(---),在RStudio中新建R markdown文件后,會(huì)自動(dòng)生成文檔頭。YAML語言采用縮進(jìn)表示不同層級(jí),相同層級(jí)左對(duì)齊即可,并不限定縮進(jìn)位數(shù)。生成的文檔頭除了標(biāo)題、作者和日期等字段外,主要的設(shè)置在“output:”的下一層級(jí),如輸出word格式,需添加“word_document”。此處需要說明,調(diào)整輸出的word文檔樣式(段落、字體等),需要運(yùn)行任意一個(gè)R markdown文檔,修改該文件的樣式并保存(設(shè)文件名為styles.docx),在文件頭中使用“reference_docx”參數(shù)調(diào)用該樣式,則可生成符合排版要求的word文檔。須注意修改樣式時(shí)不可修改樣式的名稱。文檔頭示例如下:

title: “文檔標(biāo)題”

output:

word_document:

reference_docx: styles.docx

嵌入R代碼的第2種方式通常用于代碼量較大或返回結(jié)果需單獨(dú)表示時(shí),如數(shù)據(jù)整理或制作圖表的程序。在結(jié)果展示部分下方空一行后,插入代碼塊(code chunk),以…{r }開頭,再以…作為結(jié)束,中間可如通常的R編輯器一樣,編寫代碼,如

…{r codeName,options }

this.year = 2019

mzrc = 200

print(paste0(this.year,“年,我院總診療人次為”,mzrc,“萬人”)

其中codeName和options為可選項(xiàng),codeName可供文檔其他位置調(diào)用此段代碼,options中包含了針對(duì)代碼的一些設(shè)置,如文檔中是否展示代碼(echo),代碼是否運(yùn)行(include),是否返回結(jié)果(eval),輸出圖形的尺寸(fig.width/fig.height)等。

當(dāng)完成報(bào)告的文本和代碼部分后,在RStudio編輯器上點(diǎn)擊“Knit to word”,即可將文本及R代碼運(yùn)行結(jié)果整合后,自動(dòng)轉(zhuǎn)為docx格式的報(bào)告。

基于上述2種在文檔中運(yùn)行R語言代碼的功能,即可實(shí)現(xiàn)實(shí)時(shí)動(dòng)態(tài)的統(tǒng)計(jì)報(bào)告,若需產(chǎn)生新報(bào)告進(jìn)可根據(jù)預(yù)設(shè)參數(shù)(如年份或科室名稱)產(chǎn)生需要的統(tǒng)計(jì)報(bào)告。

3 醫(yī)院統(tǒng)計(jì)報(bào)告實(shí)例

在醫(yī)院統(tǒng)計(jì)工作中,有時(shí)僅提供統(tǒng)計(jì)報(bào)表并不足以滿足醫(yī)院管理及臨床科室管理的需要,此外日常還需對(duì)一些對(duì)表格進(jìn)行描述、整理及匯總分析,當(dāng)此類報(bào)告需要按周期性(周、月、季、年等)呈現(xiàn)時(shí),會(huì)產(chǎn)生大量的重復(fù)性勞動(dòng),此時(shí)采用R markdown完成統(tǒng)計(jì)報(bào)告底稿,可極大的節(jié)省撰寫時(shí)間,提升工作效率,減少人為錯(cuò)誤。本節(jié)以假定的醫(yī)院統(tǒng)計(jì)報(bào)告為例,介紹報(bào)告中常見的情形及使用技巧。

表2 模擬醫(yī)院統(tǒng)計(jì)報(bào)告原始數(shù)據(jù)表

醫(yī)院統(tǒng)計(jì)工作報(bào)告常見的情形主要有以下幾種,(1)結(jié)果描述中包含特定科室及其指標(biāo);(2)結(jié)果描述中包括動(dòng)態(tài)判斷語句,如增長、下降等;(3)結(jié)果描述中包含某指標(biāo)的排名情況;(4)表格;(5)圖形。下面主要通過對(duì)上述情形的實(shí)現(xiàn)方法完成一份簡略的醫(yī)院統(tǒng)計(jì)工作報(bào)告,模擬報(bào)告的原始數(shù)據(jù)如表2所示。

通常文檔開始需設(shè)定報(bào)告的一些預(yù)設(shè)參數(shù)、讀取原始數(shù)據(jù)并整理及定義一些函數(shù),此處定義的參數(shù)、數(shù)據(jù)及函數(shù)可在文檔的其他部分嵌入R代碼調(diào)用使用。如本例中,分別為設(shè)定時(shí)間標(biāo)識(shí)(this.year和last.year),讀取數(shù)據(jù)(dt),定義后文所需函數(shù)(dif.f),若每部分代碼較多,可分為不同的代碼塊。

…{r }

this.year = 2019

last.year = 2018

dt = read.table(“data.file.name”) #data.file.name設(shè)置為數(shù)據(jù)文件名

#完成描述指標(biāo)變化趨勢(shì)的函數(shù),下文調(diào)用

dif.f = function(ksname){

dif = with(dt,dt[ks ==ksname & year == this.year,“mzrc”] - dt[ks ==ksname & year == last.year,“mzrc”] )

out = paste0( ifelse(dif>0,“增長”,“下降”), abs(dif) )

out

}

文檔中所需的參數(shù)、數(shù)據(jù)及函數(shù)準(zhǔn)備完成后,即可在文檔文本內(nèi)容中進(jìn)行調(diào)用。醫(yī)院統(tǒng)計(jì)報(bào)告中的常見文本描述及代碼見表3。

表3中(2)與(3)比較可發(fā)現(xiàn),通過預(yù)先編寫函數(shù),在文本中調(diào)用前文代碼塊中的函數(shù),可簡化文本的復(fù)雜度,使文檔的可讀性更強(qiáng),因此(3)中的R代碼亦推薦編寫函數(shù)實(shí)現(xiàn)相應(yīng)功能。

表3 醫(yī)院統(tǒng)計(jì)工作常用代碼示例

圖表的代碼通常都在單獨(dú)的代碼塊中完成,表格的輸出需要調(diào)用knitr::kable函數(shù)完成,該函數(shù)可以設(shè)置輸出的樣式,表標(biāo)題等參數(shù),由于醫(yī)院工作中以word為主要文件類型,由于文件類型所限,word中表格可進(jìn)行設(shè)置的參數(shù)不多,對(duì)于PDF或HTML的輸出文件,可以結(jié)合kableExtra軟件包中的函數(shù)對(duì)表格進(jìn)行更多個(gè)性化的定制。如輸出2019年各科室門診情況(表4)的代碼如下:

…{r }

outtb = subset(dt,year == 2019)

knitr::kable(outtb,format=“pandoc”,col.names = c(“科室”,“年”,“門診人次”),row.names = FALSE,caption = “表4 2019年各科室門診人次”)

表4 2019年各科室門診人次

圖形的輸出就如在R中作圖一樣,將作圖代碼塊插入圖形所在位置即可。除markdown基本語法外,亦可在代碼塊中調(diào)用knitr::include_graphics實(shí)現(xiàn)插入圖片文件。以代碼塊制作的圖形均可通過調(diào)整代碼塊設(shè)置以控制圖形輸出。

…{r fig.width = 8,fig.height = 4}

library(ggplot2)

ggplot(dt,aes(x = factor(ks,levels = unique(ks)), y = mzrc,fill = factor(year)))+

geom_col(position = position_dodge(0.6),width = 0.6)+

xlab(“”) + ylab(“門診人次”) + … #省略部分圖形設(shè)置

圖1 各科室門診人次對(duì)比

綜合運(yùn)用表3中文本表述和代碼及圖表的制作與輸出代碼塊,即可完成完整的分析報(bào)告內(nèi)容,輸出結(jié)果如圖1。為提高R markdown文檔的可讀性與簡潔性,建議統(tǒng)計(jì)人員盡可能將行內(nèi)代碼函數(shù)化,并在文檔開頭完成復(fù)雜的數(shù)據(jù)整理任務(wù)或在另一R語言文件中完成數(shù)據(jù)整理任務(wù)后,在R markdown中引用(source)該文件或讀取數(shù)據(jù)文件。

4 討論

本文介紹了R markdown的使用方法及其在醫(yī)院統(tǒng)計(jì)報(bào)告中的應(yīng)用,此工具可極大的節(jié)省重復(fù)性的勞動(dòng),提高數(shù)據(jù)分析與報(bào)告的效率,當(dāng)統(tǒng)計(jì)報(bào)告較為復(fù)雜時(shí)提升尤其明顯。當(dāng)輸出文件格式為PDF時(shí),則可通過kableExtra及l(fā)atex等進(jìn)行更加精細(xì)化的設(shè)置,與手動(dòng)對(duì)word文件進(jìn)行排版無異。

將統(tǒng)計(jì)數(shù)據(jù)運(yùn)算過程嵌入文檔中,可有效解決原始數(shù)據(jù)錯(cuò)漏、計(jì)算過程差錯(cuò)、數(shù)據(jù)謄寫錯(cuò)誤以及回溯查找問題困難等傳統(tǒng)統(tǒng)計(jì)分析與撰寫報(bào)告中常見錯(cuò)誤。當(dāng)統(tǒng)計(jì)口徑較復(fù)雜時(shí),統(tǒng)計(jì)數(shù)據(jù)的引用有時(shí)并不明確,因此,采用R markdown文檔亦可以明確記錄數(shù)據(jù)引用規(guī)則,有效解決數(shù)據(jù)引用歧義的問題。

R markdown及其衍生的各類輸出文件類型功能十分強(qiáng)大,幾乎涵蓋了文字與程序結(jié)合的各種情形。另外需要說明的是,本文所有內(nèi)容均在RStudio中使用R markdown撰寫完成,包括標(biāo)題、作者信息、摘要及參考文獻(xiàn)等,由于R markdown轉(zhuǎn)為word文件的局限性,仍需對(duì)轉(zhuǎn)換后的稿件進(jìn)行簡單格式的微調(diào)(如表格線和居中等),如有需要本文R markdown文件的讀者,可與作者聯(lián)系。

猜你喜歡
樣式調(diào)用代碼
CPMF-I 取樣式多相流分離計(jì)量裝置
CPMF-I 取樣式多相流分離計(jì)量裝置
取樣式多相流分離計(jì)量裝置
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
武强县| 自贡市| 淄博市| 英德市| 板桥市| 铜梁县| 社旗县| 江永县| 西城区| 广水市| 林甸县| 炉霍县| 澜沧| 云阳县| 湟源县| 阿拉善盟| 商南县| 中西区| 卢龙县| 福建省| 连州市| 新宁县| 邻水| 青田县| 栖霞市| 池州市| 成安县| 平利县| 勐海县| 阳春市| 北安市| 吴堡县| 信阳市| 正定县| 奇台县| 长岛县| 元阳县| 如皋市| 平和县| 邳州市| 慈溪市|