自动生成临床三线表

按照流行病学和相关领域的标准做法是,期刊文章的第一张表格,我们通常称为“表1”,是一份表,列出按暴露程度分层的研究人群基线特征的描述性统计数据。这个包使得使用R生成这样一个表相当简单。输出格式是html(它的优点是很容易复制到Word文档中;Chrome浏览器工作得很好)。

实际上这个包还能够对表格有更多定制的功能,但这样用起来爽是需要代价的,更多的代码与CSS知识

官方文档参考资料(https://benjaminrich.github.io/table1/vignettes/table1-examples.html)

R包table1

if(!require(table1)) install.packages("table1",ask=F,update=F)

## Loading required package: table1

## Warning: package 'table1' was built under R version 3.6.1

##

## Attaching package: 'table1'

## The following objects are masked from 'package:base':

##

##     units, units

require(table1)

Example1

使用boot包中的自带数据

melanoma数据集

library(boot)

## Warning: package 'boot' was built under R version 3.6.1

melanoma2

head(melanoma)

##   time status sex age year thickness ulcer

## 1   10      3   1  76 1972      6.76     1

## 2   30      3   1  56 1968      0.65     0

## 3   35      2   1  41 1977      1.34     0

## 4   99      3   0  71 1968      2.90     0

## 5  185      1   1  52 1965     12.08     1

## 6  204      1   1  28 1971      4.84     1

dim(melanoma)

## [1] 205   7

## input melanoma是一个数据框

## 对我们感兴趣的变量因子化

melanoma2$status

factor(melanoma2$status,

levels=c(2,1,3),

labels=c("Alive", # 第一个作为参考组

"Melanoma death",

"Non-melanoma death"))

可以来绘制一个表格试试,意思就是以感兴趣的因子作为分类status,同理这个status可以是任意大家感兴趣的变量。

格式为~感兴趣的基线变量|感兴趣的分类变量,data

table1(~ factor(sex) + age + factor(ulcer) + thickness | status, data=melanoma2)

image.png

这样的表格已经可以了,但仍然可以改进

基线分类变量sex,ulcer没有很好的label,基线的连续型变量可以指定单位units,下面来improve

## 给分类变量sex指定标签

melanoma2$sex

factor(melanoma2$sex, levels=c(1,0),

labels=c("Male",

"Female"))

## 给分类变量ulcer指定标签

melanoma2$ulcer

factor(melanoma2$ulcer, levels=c(0,1),

labels=c("Absent",

"Present"))

## 给变量名指定标签

label(melanoma2$sex)

label(melanoma2$age)

label(melanoma2$ulcer)

label(melanoma2$thickness)

## 给连续型变量指定单位

units(melanoma2$age)

units(melanoma2$thickness)

## 再增加overall统计量

table1(~ sex + age + ulcer + thickness | status, data=melanoma2, overall="Total")

image.png

细节控制

labels

variables=list(sex="Sex",

age="Age (years)",

ulcer="Ulceration",

thickness="Thickness (mm)"),

groups=list("", "", "Death"))##表格上的第一级Death

# 重新给status命名标签,death放到上面去

levels(melanoma2$status)

#按想要的顺序顺序设置分组或列,

#Total放第一列,split分开status

strata

# 添加渲染风格-连续型变量与分类变量展示不同

# 连续型渲染风格函数

my.render.cont

with(stats.apply.rounding(stats.default(x), digits=2), c("",

"Mean (SD)"=sprintf("%s (± %s)", MEAN, SD)))

}

# 分类变量渲染风格

my.render.cat

c("", sapply(stats.default(x), function(y) with(y,

sprintf("%d (%0.0f %%)", FREQ, PCT))))

}

## 结果

## groupsapn为分组的个数,1为Total, 1为Alive,以及2为Death

## 增加了Death的亚组

table1(strata, labels, groupspan=c(1, 1, 2),

render.continuous=my.render.cont, render.categorical=my.render.cat)

image.png

Example2

自己模拟一个数据

函数式编程

…把其余参数全部传递,…的参数传递到了sample函数

f

set.seed(427)

## 构造数据框

n

dat

dat$treat

dat$age

dat$sex

dat$wt

dat$wt[sample.int(n, 5)]

head(dat)

##   id   treat age    sex    wt

## 1  1 Treated  18 Female  62.6

## 2  2 Treated  50   Male  57.4

## 3  3 Treated  37   Male 104.6

## 4  4 Treated  25 Female  55.5

## 5  5 Placebo  60 Female  58.4

## 6  6 Treated  44 Female  41.9

标签命名

单位

## 分类变量

label(dat$age)

label(dat$sex)

label(dat$wt)

label(dat$treat)

## 连续型变量

units(dat$age)

units(dat$wt)

## 绘制默认表格

table1(~ age + sex + wt | treat, data=dat)

image.png

删除overall

table1(~ age + sex + wt | treat, data=dat, overall=F)

image.png

轻松进行多个变量分类,一键定制

table1(~ age + wt | treat*sex, data=dat)

image.png

改变顺序

table1(~ age + wt | treat*sex, data=dat)

image.png

无感兴趣变量统计表格

table1(~ treat + age + sex + wt, data=dat)

image.png

更复杂的定制

## 给原数据增加一个dose列

dat$dose

## 给dose加标签

dat$dose

## strata定制

## split指定按dose分亚组

strata

list("All treated"=subset(dat, treat=="Treated")), ## all treated组

list(Overall=dat))## overall

labels

variables=list(age=render.varlabel(dat$age),

sex=render.varlabel(dat$sex),

wt=render.varlabel(dat$wt)),

groups=list("", "Treated", ""))## 一级分组标签

## groupspan二级分组告诉你标题栏的线包括几个变量

## 对应groups

table1(strata, labels, groupspan=c(1, 3, 1))

image.png

显示不同变量的不同统计数据

例如下面的渲染风格

age展示Median

wt展示mean

rndr

if (!is.numeric(x)) return(render.categorical.default(x))

what

age = "Median [Min, Max]",

wt  = "Mean (SD)")

parse.abbrev.render.code(c("", what))(x)

}

table1(~ age + sex + wt | treat, data=dat,

render=rndr)

改变表格的样式

内置了多个渲染风格

zebra: alternating shaded and unshaded rows (zebra stripes)

grid: show all grid lines

shade: shade the header row(s) in gray

times: use a serif font

center: center all columns, including the first which contains the row labels

## 更换表格风格,用topclass参数设置

## zebra似乎不错

table1(~ age + sex + wt | treat, data=dat, topclass="Rtable1-zebra")

image.png

增加一列pvalue

实际上这个功能本身是没有的,但是可以通过添加一个渲染来实现

library(MatchIt)

## Warning: package 'MatchIt' was built under R version 3.6.1

data(lalonde)

head(lalonde)

##      treat age educ black hispan married nodegree re74 re75       re78

## NSW1     1  37   11     1      0       1        1    0    0  9930.0460

## NSW2     1  22    9     0      1       0        1    0    0  3595.8940

## NSW3     1  30   12     1      0       0        0    0    0 24909.4500

## NSW4     1  27   11     1      0       0        1    0    0  7506.1460

## NSW5     1  33    8     1      0       0        1    0    0   289.7899

## NSW6     1  22    9     1      0       0        1    0    0  4056.4940

## 分类变量

lalonde$treat

lalonde$black

lalonde$hispan

lalonde$married

lalonde$nodegree

lalonde$black

lalonde$hispan

lalonde$married

lalonde$nodegree

##连续变量

label(lalonde$black)

label(lalonde$hispan)

label(lalonde$married)

label(lalonde$nodegree)

label(lalonde$age)

label(lalonde$re74)

label(lalonde$re75)

label(lalonde$re78)

units(lalonde$age)

rndr

if (length(x) == 0) {

y

s

if (is.numeric(y)) {

p

} else {

p

}

s[2]

s

} else {

render.default(x=x, name=name, ...)

}

}

rndr.strat

ifelse(n==0, label, render.strat.default(label, n, ...))

}

## 绘图

table1(~ age + black + hispan + married + nodegree + re74 + re75 + re78 | treat,

data=lalonde, droplevels=F, render=rndr, render.strat=rndr.strat, overall=F)

image.png

本期内容就到这里,我是白介素2,下期再见。

相关阅读:

用HTML绘制三线表,R语言-临床三线表相关推荐

  1. PCA主成分分析教程(origin分析绘制,无须R语言)

    PCA主成分分析教程(origin分析&绘制,无须R语言) 相关性分析,相关的介绍内容大家自行搜索资料即可,这里不给大家过多阐述. 案例解读 PCA作为常见的一种聚类分析方法,在很多SCI论文 ...

  2. R语言临床预测模型:分层构建COX生存回归模型STRATIFIED COX MODEL、KM生存曲线、PH假设检验...

    全文链接:http://tecdat.cn/?p=32046 stratified cox model是针对协变量不满足PHA提出的,这里的思想是对协变量分层(点击文末"阅读原文" ...

  3. R语言临床预测模型的评价指标与验证指标实战:净重新分类指数NRI(Net Reclassification Index, NRI)

    R语言临床预测模型的评价指标与验证指标实战:净重新分类指数NRI(Net Classification Index, NRI) #净重新分类指数NRI

  4. R语言临床预测模型的评价指标与验证指标实战:综合判别改善指数IDI(Integrated Discrimination Improvement, IDI)

    R语言临床预测模型的评价指标与验证指标实战:综合判别改善指数IDI(Integrated Discrimination Improvement, IDI) 目录

  5. R语言临床预测模型的评价指标与验证指标实战:C-index指标计算

    R语言临床预测模型的评价指标与验证指标实战:C-index指标计算 目录 R语言临床预测模型的评价指标与验证指标实战:C-index指标计算

  6. R语言临床预测模型的评价指标与验证指标实战:自定义的净重新分类指数NRI(Net Reclassification Index, NRI)函数

    R语言临床预测模型的评价指标与验证指标实战:自定义的净重新分类指数NRI(Net Reclassification Index, NRI)函数 目录

  7. R语言临床预测模型的评价指标与验证指标实战:自定义的综合判别改善指标(Integrated Discrimination Improvement, IDI)函数

    R语言临床预测模型的评价指标与验证指标实战:自定义的综合判别改善指标(Integrated Discrimination Improvement, IDI)函数 目录

  8. 相关性热图绘制教程(origin绘制,无须R语言)

    相关性热图绘制教程(origin绘制!无需R语言) 相关性热图在很多文章中都有出现,一般都是使用R语言进行绘制.在origin中也可以进行同样的绘制,详细过程如下: 实例解读 这个数据是来源于R中的一 ...

  9. R语言临床预测模型的评价指标与验证指标实战:ROC曲线、AUC(C-Statistics)

    R语言临床预测模型的评价指标与验证指标实战:ROC曲线.AUC(C-Statistics) 目录 R语言临床预测模型的评价指标与验证指标实战:ROC曲线.AUC(C-Statistics)</

  10. R语言|4. 轻松绘制临床基线表Table 1 临床三线表绘制

    R语言|4. 轻松绘制临床基线表Table 1 regular table regular 欢迎关注公众号 第四次考核 Jimmy 学徒考核 Linux安装软件 rnaseq上游分析-2 ascp k ...

最新文章

  1. “云智一体”的全场景智能视频技术是什么?
  2. 第九课.朴素贝叶斯分类器
  3. 深入了解Kubernetes CRD开发工具kubebuilder
  4. 图形变换动画的小Demo
  5. 【常用模板】 01背包
  6. 贝叶斯优化python包_Bayesian2D-用贝叶斯优化方法求任意二维函数的最大值或最小值的软件包-Juhan Raidal...
  7. python自动测试a_python自动化单元测试
  8. 如何抓取所有域用户的hash(win2008--win2012)
  9. Swift语言精要 - Dictionary(字典)
  10. 一个简化的插件框架c#
  11. xp配置iis和php,XP下让IIS支持PHP
  12. unable to connect to ssl://gateway.sandbox.push.apple.com:2195 错误
  13. hive sql脚本学习
  14. cmd怎么查看当前静态路由_计算机cmd命令之route,查看路由表,或配置一个更有效的路由...
  15. “初中三年,死磕这一点,英语次次110分以上!”教了一辈子英语的老教师如是说...
  16. [牛客练习] 深信服校园招聘c/c 软件开发H卷 Apare_xzc
  17. 通过 U 盘启动重装 macOS 系统
  18. python的pyautogui的函数,实现按键精灵
  19. 用连接去创造,研发不再成为老大难
  20. python实现自动拨号

热门文章

  1. centOs安装 ruby环境
  2. 联想小新i1000拆机图解_小白晒小白:Lenovo 联想 小新 I1000 笔记本电脑
  3. Elasticsearch摄取节点(十)——GeoIP以及Grok处理器
  4. python 读写三菱PLC数据,使用以太网读写Q系列,L系列,Fx系列的PLC数据
  5. MATLAB实现香农编码
  6. 单片机c语言实验交通信号灯,单片机设计交通信号灯实验报告.docx
  7. 运用网络执法官实现网络监控
  8. ScienceWord控件问题以及IE8对于base64编码图片长度限制的解决方案
  9. 分享微软一站式示例脚本库 - IT专业人士的省时利器
  10. 变色龙配置文件功能介绍