我需要准备一个临床特征表,不仅显示二分变量的一种表现的频率,而且在同一行上用 /(斜杠)分隔。
例如:
性别(女、男):10/8
但是,我做不到。我唯一能做的就是相对于观察总数的数字:
data("mtcars")
require(gt_summary)
tbl_summary(mtcars,
statistic = list(
all_continuous() ~ "{mean}±{sd}",
all_dichotomous() ~ "{n}/{N}"
)
)
我也尝试过:
tbl_summary(mtcars,
statistic = list(
all_continuous() ~ "{mean}±{sd}",
all_dichotomous() ~ "{n}/{N-n}"
)
)
但这行不通。
不幸的是,该杂志强制采用这种风格。
有什么想法吗?
这需要一些解决方法来使用“stargazer”包来实现。请参阅下面的代码。
install.packages("tidyverse")
library(tidyverse)
data(mtcars)
a <- mtcars %>%
select_if(~is.numeric(.)) %>%
summarise(across(everything(), list(N = ~str_c(round(mean(.),2), " ± ", round(sd(.),2))))) %>%
as.data.frame() %>%
pivot_longer(
cols = everything(),
names_to = c("Characteristic", ".value"),
names_sep = "_"
)
categorical_var <- mtcars %>% select_if(~!is.numeric(.)) %>% colnames(.) %>% as.vector()
install.packages("foreach")
library(foreach)
b <- foreach(i = categorical_var, .combine = 'rbind') %do% {
temp <- mtcars %>%
select(i) %>%
group_by(get(i)) %>%
count() %>%
rename(Characteristic = `get(i)`, N = n)
temp[[1]] <- str_c(i, " ( ", paste0(temp[[1]], collapse=", "), " )")
temp[[2]] <- str_c(temp[[2]], collapse=" / ")
temp
}
b <- b %>% distinct(.)
c <- rbind(a,b)
library(stargazer)
stargazer(c, type="html", summary=F)
运行类型设置为“html”的函数“stargazer”将在 R 控制台中打印出表格的 HTML 代码。您可以将生成的代码复制粘贴到文本编辑器(我更喜欢 Notepad++)中,将其另存为 HTML 文件类型,然后在您选择的 Web 浏览器(Edge、Chrome、Firefox 等)中打开它。
注意 - 所有单独的代码块也可以很好地打包到自定义函数中。请根据需要随意修改。