R语言reshape2包对数据格式进行整理

在临床研究中经常需要需要从医院的His系统里面导入化验单数据,然而从His系统里面导出的数据都是宽数据,很多都是多人多次反复的检查结果,并不好进行直接分析,如下图
在这里插入图片描述
我们需要转换成下列长数据形式才好进一步分析
在这里插入图片描述
我们今天将使用R语言自带的reshape2包对数据格式进行整理,将宽数据转换成长数据,或者根据需要在长宽数据进行转化,这在临床数据采集或数据挖掘中有积极的现实意义。
我们先来导入reshape2包和自己模拟一个轻度高血压的宽数据,

library(reshape2)
id<-rep(1:12)
time<-rep(1:3,4)
sbp<-round(rnorm(12,mean = 150,sd=9))
svd<-round(rnorm(12,mean = 90,sd=8))
bc<-data.frame(id,time,sbp,svd)

随便模拟一下,临床意义不管他,下图是数据的结构
在这里插入图片描述

be<-melt(bc,id=c("id","time"),
         measure.vars = (c("sbp","svd")),
         variable.name = "bp",
         value.name = "value") ##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的平均值

更多精彩文章请关注公众号:零基础说科研
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值