在臨床研究中經常需要需要從醫院的his系統裡面匯入化驗單資料,然而從his系統裡面匯出的資料都是寬資料,很多都是多人多次反覆的檢查結果,並不好進行直接分析,如下圖
我們需要轉換成下列長資料形式才好進一步分析
我們今天將使用r語言自帶的reshape2包對資料格式進行整理,將寬資料轉換成長資料,或者根據需要在長寬資料進行轉化,這在臨床資料採集或資料探勘中有積極的現實意義。
我們先來匯入reshape2包和自己模擬乙個輕度高血壓的寬資料,
library(reshape2)
id12)
time
3,4)
sbp12,mean =
150,sd=9)
)svd
12,mean =
90,sd=8)
)bc
隨便模擬一下,臨床意義不管他,下圖是資料的結構
)##id為固定不變的變數,measure.vars為需要整合的變數,variable.name 為新變數名字
新的變數bp把sbp和svd整合在裡面了。
我們需要的話也可以把長資料從新轉成寬資料
#轉成寬資料
dcast(be,id+time~bp)
#轉成寬資料
其他的還有
dcast(be,id+time~bp,mean)
#轉成寬資料並取平均值
dcast(be,time~bp,mean)
#取3次timede
acast(be,id~time~bp)
#分組表示sbp,svd的平均值
如果資料很大的話,我們也可以取一部分亞組,資料大的時候有用
取亞組的話還要匯入乙個plyr包
#取亞組表示
library(plyr)
acast(be,bp~id,mean, subset = .(bp ==
"sbp"))
#取sbp為亞組的值
acast(be,bp~time,mean, subset = .(bp ==
"sbp"))
#time每次測量平均值取sbp
acast(be,bp~time,mean, subset = .(time ==3)
)#取第三次sbp和svd的平均值
acast(be,bp~time,mean, subset = .(time <3)
)#time前兩次的sbp和svd的平均值
R語言的reshape2包及相關函式
merge函式 合併擁有兩個共同列名或者兩個共同行名的資料幀。merge x,y,by intersect names x names y by.x by,by.y by,all false,all.x all,all.y all,sort true,suffixes c x y no.dups t...
R語言 資料轉化2
資料框的轉置 行與列的轉置t 函式,單獨轉置一行利用rev函式即可用於向量也可用於資料框 修改資料框中的值 eg 將women資料集中身高英吋換位厘公尺 為單位 如果需要修改的值較多上面的方法就不高效率,可以利用transfor函式可以任意修改資料框中列的值 如果不想修改原資料那麼可以再定義乙個值 ...
R語言常用資料探勘包
今天發現乙個很不錯的部落格 博主致力於研究r語言在資料探勘方面的應用,正好近期很想系統的學習一下r語言和資料探勘的整個流程,看了這個部落格的內容,心裡久久不能平靜。決定從今天開始 今天發現乙個很不錯的部落格 博主致力於研究r語言在資料探勘方面的應用,正好近期很想系統的學習一下r語言和資料探勘的整個流...