Loading...
墨滴

Rookie宇

2021/12/02  阅读:66  主题:雁栖湖

R语言快速制作学术论文三线表

Part1R语言快速制作学术论文三线表

三线表以其形式简洁、功能分明、阅读方便而在科技论文中被推荐使用。

本文主要使用table1包制作三线表,生成的三线表为html格式,可以直接复制到word中,本文主要实现以下目标:

  • 制作基本三线表
  • 制作双变量三线表
  • 三线表自定义设定
  • 修改三线表格样式
library(table1)

1创建数据集

首先简单创建一个数据集之后用于三线表制作。

f <- function(x, n, ...) factor(sample(x, n, replace=T...), levels=x)
set.seed(427)

n <- 146
dat <- data.frame(id=1:n)
dat$treat <- f(c("Placebo""Treated"), n, prob=c(12)) # 2:1 randomization
dat$age   <- sample(18:65, n, replace=TRUE)
dat$sex   <- f(c("Female""Male"), n, prob=c(.6.4))  # 60% female
dat$wt    <- round(exp(rnorm(n, log(70), 0.23)), 1)

# Add some missing data
dat$wt[sample.int(n, 5)] <- NA

label(dat$age)   <- "Age"
label(dat$sex)   <- "Sex"
label(dat$wt)    <- "Weight"
label(dat$treat) <- "Treatment Group"

units(dat$age)   <- "years"
units(dat$wt)    <- "kg"

head(dat)

2三线表(单变量分列)

table1(~ age + sex + wt | treat, data=dat, overall = "Total")
  • table1包使用了熟悉的公式界面,表中要包含的变量用+符号隔开,分层变量(创建列)出现在符号|的右边,数据参数指定了一个包含公式中变量的数据集data.frame

  • 当包含缺失值(这里是weight)时,无论是连续的还是分类的,这些都会作为一个单独的类别报告(有计数和百分比)。

  • Total这一栏可以很容易地删除(或重新标记)。

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

三线表(双变量分列)

我们也可以通过两个变量进行分列,在这种情况下它们会被嵌套。例如,要看每个治疗组按性别划分。

table1(~ age + wt | treat*sex, data=dat)
  • 或者,换个顺序(每种性别按治疗组划分)。
table1(~ age + wt | sex*treat, data=dat)
  • 或者不分层:
table1(~ treat + age + sex + wt, data=dat)

3自定义三线表格式

最后,我们可以再次考虑一些更复杂的东西,使用默认(即非公式)界面。

假设不是简单地被分配到安慰剂或积极治疗,而是实际上有两个剂量的治疗随机分配,5毫克和10毫克,我们希望每个剂量水平以及所有治疗对象都有列统计。

dat$dose <- (dat$treat != "Placebo")*sample(1:2, n, replace=T)
dat$dose <- factor(dat$dose, labels=c("Placebo""5 mg""10 mg"))

strata <- c(split(dat, dat$dose), list("All treated"=subset(dat, treat=="Treated")), list(Overall=dat))

labels <- list(
    variables=list(age=render.varlabel(dat$age),
                   sex=render.varlabel(dat$sex),
                   wt=render.varlabel(dat$wt)),
    groups=list("""Treated"""))

table1(strata, labels, groupspan=c(131))

4修改表格样式

该包中有一些内置的表格样式,例如:

  • Zebra:交替出现有阴影和无阴影的行(斑马线)。
  • grid:显示所有网格线
  • shade:对标题行进行灰色阴影处理
  • times:使用衬线字体
  • center:将所有列居中,包括包含行标签的第一列。

这些样式可以通过table1topclass参数来选择。下面是一些例子。

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

5Reference

Rich, B. (2021, June 6). Using the table1 Package to Create HTML Tables of Descriptive Statistics. R-Project.org. https://cran.r-project.org/web/packages/table1/vignettes/table1-examples.html Make Beautiful Tables with the Formattable Package | R-bloggers. (2018, November 15). R-Bloggers. https://www.r-bloggers.com/2018/11/make-beautiful-tables-with-the-formattable-package/ Rich, B. (2021). Tables of Descriptive Statistics in HTML [R package table1 version 1.4.2]. R-Project.org. https://doi.org/https://CRAN.R-project.org/package=table1

Rookie宇

2021/12/02  阅读:66  主题:雁栖湖

作者介绍

Rookie宇

公众号: R语言vs科研