文章来源:如何快速绘制论文的表1(基本特征三线表)| tableone包你值得拥有
跟大家分享一个快速绘制论文中表1(基本特征三线表)的包:tableone。一起来探索吧!
一.加载包
library(tableone)
二.加载并查看数据
#该数据是梅奥诊所原发性胆汁性肝硬化的数据
library(survival)
data(pbc)
#查看数据前6行
head(pbc)
先看一下不对数据进行任何处理做出来的表1是怎样的
tableOne <- CreateTableOne(data = pbc)
可以从表中看到的是,数值变量以均值标准差的形式描述,部分分类变量以频数百分比的形式描述,但是有些分类变量如stage被当做数值变量来描述了,所以还是得稍微处理一下,让R知道哪些是哪些是数值变量,哪些是分类变量。
三.创建变量列表
查看pbc数据集包含哪些变量
dput(names(pbc))
挑选自己所要展示的变量
vars <- c("time","status","age","sex","ascites","hepato",
"spiders","edema","bili","chol","albumin",
"copper","alk.phos","ast","trig","platelet",
"protime","stage")
四.定义分类变量
varsToFactor <- c("status","trt","ascites","hepato","spiders","edema","stage")
五.创建表1
tableOne <- CreateTableOne(vars = vars,
data = pbc, factorVars = varsToFactor)
这时候我们可以看到分类变量可以正常显示了
tips:可以用命令pbc[varsToFactor] <- lapply(pbc[varsToFactor], factor)使pbc数据集的所有的分类变量变成因子,这样在创建表的时候就不用factorVars = varsToFactor函数了,关于lapply函数可参考:R语言apply族函数汇总
还有一个问题可能会被忽略,就是有些变量虽然是数值变量,但是它是非正态的,这时候也就不能用均值标准差的形式描述了。
六.定义非正态分布变量
non_normal <- c("bili","chol")
七.打印输出
print(tableOne, nonnormal = non_normal,showAllLevels = TRUE)
可以看到bili,chol变量已经用中位数和四分位数显示了
解决了数据类型的问题,接下来对数据集按照某个变量的分组进行汇总,以trt分组为例
八.分组汇总
tableTwo <- CreateTableOne(vars = vars, strata = c("trt"),
data = pbc,addOverall = TRUE)#addOverall = TRUE是给出不分组的信息
在给出的P值中,分类变量默认使用卡方检验;连续变量默认使用单因素方差分析,当两组时方差分析等用于t检验。
但是当刚才也说了,有些数值变量不是正态分布,就不能用方差分析或t检验来做组间比较,这时候就要用非参数检验,而有些不满足卡方检验条件的就要用fisher精确检验。比如:
IO=print(tableTwo, nonnormal = c("bili","chol","copper","alk.phos","trig"),
exact = c("status","stage"), smd = TRUE)#nonnormal:非参数检验,exact:确切概率检验
结果输出到excel,放在F盘:
setwd("F://")
write.csv(IO, file = "myTable3.csv")
自己再按照杂志社要求整理一下即可。
附:
详细结果
summary(tableTwo)
数值变量包含:缺失值数量,占比,均值标准差,四分位间距,偏度峰
因子变量包含:缺失值数量,占比,水平数,频率和累计频率
只看分类变量
tableTwo$CatTable
summary(tableTwo$CatTable)
只看连续变量
tableTwo$ContTable
summary(tableTwo$ContTable)
小结:tableone这个包大大缩短了我们制作论文表1的时间,我们只需要分清楚变量类型(哪些是数值变量(正态和非正态),哪些是连续变量),接着选择相应的统计方法,剩下的就交给电脑去做了。这比用SPSS算出结果然后复制粘贴到excel方便了很多,也降低了出错率。
参考资料:R帮助文件