descrTable常用方法
descrTable 为 R 包 compareGroups 的重要函数,有关该函数以及 compareGroups 包的详细内容见:R包compareGroups详细用法
加载包和数据
library(compareGroups)
# 加载 REGICOR 数据(横断面,从不同年份纳入,每个变量有个label)
data(regicor)
# 保留部分变量
regicor <- regicor[,c('id','age','sex','smoker','height','weight')]
1. formula、data、show.all、digits、show.p.overall、show.p.trend、show.n、digits.p、all.last
-
formula: 一个 “公式” 类的对象(或可以转换为该类的对象)。
~
的右侧必须以加减法方式纳入包含项,或为.
纳入所有变量。左侧必须包含分组变量的名称,或者可以留空(在这种情况下,将为整个样本提供描述性统计数据,并且不进行测试)。 -
data: 一个可选的数据框、列表或环境(或可通过
as.data.frame
强制转换为数据框的对象),包含模型中的变量。如果在data
中找不到变量,则这些变量会从environment(formula)
中获取。 -
show.all: 逻辑值,指示是否显示 ‘[ALL]’ 列(未按组分层的所有数据)。如果定义了分组变量,则默认值为 FALSE;如果没有组,则为 FALSE。
-
digits: 一个整数向量,其组件数量与变量相同。设置每个变量的保留小数位数。如果其长度为 1,则对所有变量进行设置。每个组件指定要显示的有效小数位数。或者是一个命名向量,指定 ‘digits’ 应用于哪些变量(一个保留名称是 ‘.else’,定义其余变量的 ‘digits’);如果没有定义 ‘.else’ 变量,则对其余变量应用默认值。默认值为 NA,表示使用"适当"的小数位数(详细信息请参见说明文档)。
-
show.p.overall: 逻辑值,指示是否显示整体组显著性(‘p.overall’ 列)的 p 值。默认值为 TRUE。
-
show.p.trend: 逻辑值,指示是否显示 p-trend。如果组少于 3,则始终为 FALSE。如果缺少此参数且组数超过 2 且分组变量为有序因子,则显示 p-trend。默认情况下,p-trend 不显示;当组数超过 2 且分组变量为有序因子类时显示。
-
show.n: 逻辑值,指示是否在 ‘descr’ 表中显示每个变量分析的个体数量。默认值为 FALSE,当没有组时为 TRUE。
-
digits.p: 整数,指示所有 p 值显示的小数位数。默认值为 3。
-
all.last: 逻辑值。整个样本的描述性统计放在按组描述性统计之后。默认值为 FALSE,表示整体队列的描述性统计放在第一位。
descrTable( smoker ~ . -id,
data = regicor,
show.all = TRUE,
digits = c(2,2,3,4), # 为不同变量设置保留位数
show.p.trend = TRUE,
show.p.overall = TRUE,
show.n = TRUE,
digits.p = 4
)
descrTable( smoker ~ . -id,
data = regicor,
show.all = TRUE,
all.last = TRUE # 最后一列显示 ALL
)
2. subset、select
- selec: 一个包含与列变量相同数量组件的列表。如果列表长度为 1,则它会为所有变量重复。
selec
的每个组件是一个表达式,该表达式将被评估以选择每个变量分析的个体。否则,将应用一个指定了变量的命名列表。.else
是一个保留名称,用于定义其他变量的选择。如果没有定义.else
变量,则对其他变量应用默认值。默认值为NA
,即分析所有个体(不进行子集化)
descrTable( smoker ~ . - id,
show.all = TRUE,
show.n = TRUE,
data = regicor,
selec = list(sex = sex == "Male", # 只分析男性
height = weight >70) # 只分析体重大于 70 人的身高
)
# 可以看到 age、weight 的 N 还是不变,为 2233,2209
# sex 只分析了男性,身高只分析体重大于 70 人的
- subset: 可选的向量,指定用于计算过程的个体子集。它会应用于所有变量。
subset
和selec
在每个变量中以&
的形式添加。
descrTable( smoker ~ . - id,
show.all = TRUE,
show.n = TRUE,
data = regicor,
subset = (sex == "Male" & weight > 70)) # 只分析同时满足的个体的,N只剩837
3. na.action
na.action: 一个函数,指示当数据包含 NA 时应该发生什么。默认值为 NULL,相当于 na.pass
,即不采取任何行动。na.exclude
可以在希望移除所有在任何变量中有 NA 的个体时很有用。
descrTable( smoker ~ . - id,
show.all = TRUE,
show.n = TRUE,
data = regicor,
na.action = na.exclude)
4. method
method: 整数向量,包含与变量数量相同的组件。仅适用于连续变量(对于因子变量则被忽略)。默认值为1,可能的值为:
1- 强制分析为 “正态分布”;
2- 强制分析为 “连续非正态”;
3- 强制分析为 “分类”;
4- NA,进行 Shapiro-Wilks 正态性检验以决定正态或非正态。
descrTable( smoker ~ . - id,
show.all = TRUE,
show.n = TRUE,
data = regicor,
method = c(height = 2, weight =2))
descrTable( smoker ~ . - id,
show.all = TRUE,
show.n = TRUE,
data = regicor,
method = c(1,2,2,1))
5. hide
hide: 一个向量(或列表),包含与变量数量相同的整数或字符, 隐藏分类变量的第几类别。如果其长度为 1,则对所有变量进行回收。每个组件指定必须隐藏且不显示的类别(如果是字符,则为类别的文字名称;如果是整数,则为位置)。此参数仅适用于分类变量,对于连续变量将被忽略。如果为 NA,则显示所有类别。或者是一个命名向量(或命名列表),指定应用于哪些变量的 ‘hide’,其余变量应用默认值。默认值为 NA。
descrTable( smoker ~ . - id,
show.all = TRUE,
show.n = TRUE,
data = regicor,
hide = 2) # 隐藏第二类别
6. sd.type、q.type、extra.labels
-
sd.type: 一个整数,指示标准偏差的显示方式:1 - mean(SD),2 - mean ± SD。
-
q.type: 一个包含两个整数的向量。第一个组件指非正态变量显示的括号类型(1 - 方形,2 - 圆形),第二个组件指百分位数分隔符(1 - ‘;’,2 - ‘,’,3 - ‘-’)。默认值为 c(1, 1)。
-
extra.labels: 字符向量,包含 4 个组件,对应于附加到正常、非正态、分类或生存变量标签的关键标签。默认值为 NA,不附加任何额外关键字。如果设置为 c(“”,“”,“”,“”),则附加"Mean (SD)"、“Median [25th; 75th]”、“N (%)” 和 “Incidence at time=timemax”(请参阅 compareGroups 函数中的 timemax 参数)。
descrTable( smoker ~ . - id,
show.all = TRUE,
show.n = TRUE,
data = regicor,
sd.type = 2, # 更改描述 sd 的方式
q.type = c(2,2), # 更改描述 quantile 的方式
extra.labels = c("","","",""))
7. 修改变量的 label
修改变量的 label 以在表格中直接显示
attr(regicor$tcv,"label")<-"Cardiovascular"
8. 修改源代码,提升客制化能力
在R脚本中输入createTable(), 然后鼠标对着函数名,按下 ctrl和鼠标左键,可以看到这个函数的源代码。但可以发现源代码为只读模式,因为在安装R包时,R源代码就被编译为了二进制文件以提升代码运行速度。因此通常可以通过下载源代码并修改后重新编译安装或者新建同名函数覆盖
1、下载源代码修改后编译安装
# 下载 compareGroups 包的源代码
download.packages("compareGroups", destdir = ".", type = "source")
# 解压源代码
# tar -xzf compareGroups_x.x.x.tar.gz
# 修改源代码
# 找到原函数并修改
# 重新安装
# 进入解压后的包目录
setwd("compareGroups")
# 编译并安装修改后的包
system("R CMD build .")
install.packages("compareGroups_x.x.x.tar.gz", repos = NULL, type = "source")
github上createTable()函数在如图文件中
2、创建同名 function 覆盖源代码
# 获取 creaTable 函数的源代码
getAnywhere(createTable)
# 或
edit(compareGroups::createTable)
# 将函数源代码复制出来
createTable <- function(...) {
# 这里是函数的原始源代码
# 修改你需要更改的部分
}
9. 修改结果tab
修改源代码可以一劳永逸,但如果不会也可以用代码修改结果
tab$descr <- apply(tab$descr, c(1, 2), function(x) gsub("±", "+-", x))
tab$descr <- apply(tab$descr, c(1, 2), function(x) gsub("\\[", "(", x))