我会尝试这样的事情。我以 Iris 数据集为例。要回答您的第一个问题,我将使用 sapply 并使用 shapiro.test 来获取数据是否呈正态分布。我使用 p 值来确定它是否是正态分布的,但如果有更合适的标准,您可以替换自己的标准。在第一步之后,您有两个向量,一个指定哪些变量通常是 dist 哪些不是。然后您可以将该向量传递给 gtsmmary 以告诉它修改这些变量的测试和统计信息。您不需要为默认的非正态分布变量 bc 传递它。
library(gtsummary)
library(dplyr)
normvals <- sapply(iris[sapply(iris, is.numeric)], function(x){
normtest <- shapiro.test(x)
#output pvalue
normtest$p.value
})
notnorm <- names(normvals[normvals <.05])
norm <- names(normvals[normvals >= .05])
irisdf <- filter(iris, Species != "setosa") %>%
mutate(Species = as.character(Species))
tbl_summary(irisdf,
by = Species,
statistic = list(all_of(norm) ~ "{mean} ({sd})")) %>%
add_p(
test = list(all_of(norm) ~ "t.test"
))
编辑:您可以将变量硬编码到 gtsummary 调用中,以便确保它适用于截至 2020 年 9 月 22 日的 CRAN 版本:
tbl_summary(irisdf,
by = Species,
statistic = list(c('Sepal.Width', 'Sepal.Length') ~ "{mean} ({sd})")) %>%
add_p(
test = list(c('Sepal.Width', 'Sepal.Length') ~ "t.test"
))