我正在使用 gtsummary 包中的 tbl_summary 创建发布表,汇总数据表中的长分类数据列表。出于发布目的,tbl_summary 允许使用参数分配人类可读的变量标签而不是变量名称
label = grade ~ "Tumor Grade"
对于列表形式的多个变量:
label = list(api00 ~ "API in 2000",
api99 ~ "API in 1999",
api98 ~ "API in 1998")
但是,我有数百个变量,并且变量名称和相应的人类可读标签一起存储在另一个表中。
如何从带有这些值的单独表中创建上述格式的列表(即 var_name ~“变量标签”)并将其作为参数传递到 tbl_summary 标签中?
换句话说,我有一个格式的表格:
VAR_NAME VAR_LABEL
var1 First variable
var2 Second variable
... ...
var159 Hundred fifty ninth variable
有没有办法读取此表并将参数作为列表传递给 tbl_summary 的标签函数:
label = list(VAR_NAME ~ "VAR_LABEL")
提前致谢。
我认为最好的选择是将变量标签保存为命名列表。它们更容易使用,并且您可以将命名列表传递给 gtsummary 中的任何标签参数。
library(gtsummary)
packageVersion("gtsummary")
#> [1] '1.3.6'
list_of_labels <-
list(age = "Patient Age, yrs",
grade = "Path. Tumor Grade")
tbl <-
trial %>%
select(age, grade) %>%
tbl_summary(label = list_of_labels)
# convert a data frame into a list
data.frame(variable = c("age", "grade"),
label = c("Patient Age, yrs", "Path. Tumor Grade")) %>%
tibble::deframe() %>%
as.list()
#> $age
#> [1] "Patient Age, yrs"
#>
#> $grade
#> [1] "Path. Tumor Grade"
由 reprex 包于 2021 年 2 月 20 日创建(v1.0.0)
您可以使用
Map
动态创建标签。如果您的数据框名为 df
,请尝试:
formula_list <- Map(function(x, y) as.formula(sprintf('%s~"%s"', x, y)),
df$VAR_NAME, df$VAR_LABEL)
然后在
formula_list
中使用这个label
。
label = formula_list
已经有一段时间了,但以防万一有人正在寻找一种方法从 gtsummary 表的查找/密码本表中提取标签,下面是一个可重现的示例,受到上面响应的启发。
# create lookup table
labels <- data.frame(
variable_name = c("Sepal.Length", "Sepal.Width", "Petal.Length"),
Label = c("Sepal.Length: this", "Sepal.Width: that", "Petal.Length: other")
)
# set labels
formula_list <- lapply(seq_len(nrow(labels)), function(i) {
as.formula(sprintf('%s ~ "%s"', labels$variable_name[i], labels$Label[i]))
})
# get label names
lab_names <- unlist(lapply(formula_list, function(formula) {
as.character(formula[[2]]) # Extract the second element from the formula
}))
# create table
iris %>%
gtsummary::tbl_summary(
include = lab_names,
label = formula_list
)