使用 modelsummary 或类似包显示整个样本以及子组的统计数据
Display statistics for the whole sample as well as subgroups with modelsummary or similar packages
我正在尝试创建一个 table,其中包含整个样本和子组的描述性统计数据。我的目标是使用精彩的 modelsummary R 包 return 一个 table 具有均值、标准差、最小值、中值、最大值和为整个样本计算的变量的图表以及平均值和标准差每个组。我能够通过两个单独的 table 实现这一点。但是,我想将所有这些信息放在一个 table 中,首先是整个样本的统计数据(见图 1),其次是子组(见图 2)。如果可能,我还想为整个样本添加 first-level 标题并将其命名为“全部”或“整个样本”。最后,鉴于我所在领域的期刊需要使用 APA 样式,我想知道是否可以将 table 转换为这种格式(例如,具有所有必需的边框、黑色而不是灰色的文本等) (见图 3)。如果 modelsummary 不能处理这个问题,我也愿意尝试其他包。非常感谢任何愿意提供帮助的人!
library(palmerpenguins)
library(tidyverse)
library(kableExtra)
library(modelsummary)
penguins <- penguins %>% as.data.frame() %>% select(species, bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g)
#scale variables for histogram and boxplot
pen_scaled <- penguins %>% select(bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g) %>%
mutate(across(where(is.numeric), ~scale(.))) %>% as.data.frame()
# create a list with individual variables and remove missing
pen_list <- lapply(pen_scaled, na.omit)
# create a table with `datasummary`
# add a histogram with column_spec and spec_hist
# add a boxplot with colun_spec and spec_box
emptycol <- function(x) " "
pen_table <- datasummary(All(penguins) ~ Mean + SD + Min + Median + Max + Heading("Boxplot") * emptycol + Heading("Histogram") * emptycol, data = penguins) %>%
column_spec(column = 7, image = spec_boxplot(pen_list)) %>%
column_spec(column = 8, image = spec_hist(pen_list))
pen_table
图一
pen_table2 <- datasummary_balance(~species, data = penguins, dinm = FALSE)
pen_table2
图2
图3
这里有两个问题:
- 如何改变table的外观?
- 如何创建具有给定形状(尚未具体定义)的 table?
问题 1
使用 kableExtra
包可以非常灵活地配置外观(modelsummary
通过 [=16= 还支持 gt
、huxtable
和 flextable
] 争论)。更改外观的一种简单方法是使用 kableExtra
中的 kable_classic()
函数,如下所示。如果您有更具体的需求,请参考kableExtra
文档:
- HTML: https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html
- LaTeX/PDF: http://haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf
问题 2
As noted in the documentation for datasummary()
,可以用一个1
来表示“全样本”。这是一个最小的例子:
library(palmerpenguins)
library(tidyverse)
library(kableExtra)
library(modelsummary)
penguins <- penguins %>% as.data.frame() %>% select(species, bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g)
# scale variables for histogram and boxplot
pen_scaled <- penguins %>% select(bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g) %>%
mutate(across(where(is.numeric), ~scale(.))) %>% as.data.frame()
pen_list <- lapply(pen_scaled, na.omit)
emptycol <- function(x) " "
datasummary(All(penguins) ~ Heading("Entire sample") * 1 * (Mean + SD + Min + Median + Max + Heading("Boxplot") * emptycol + Heading("Histogram") * emptycol) + species * (Mean + SD),
data = penguins) %>%
column_spec(column = 7, image = spec_boxplot(pen_list)) %>%
column_spec(column = 8, image = spec_hist(pen_list)) %>%
kable_classic()
我正在尝试创建一个 table,其中包含整个样本和子组的描述性统计数据。我的目标是使用精彩的 modelsummary R 包 return 一个 table 具有均值、标准差、最小值、中值、最大值和为整个样本计算的变量的图表以及平均值和标准差每个组。我能够通过两个单独的 table 实现这一点。但是,我想将所有这些信息放在一个 table 中,首先是整个样本的统计数据(见图 1),其次是子组(见图 2)。如果可能,我还想为整个样本添加 first-level 标题并将其命名为“全部”或“整个样本”。最后,鉴于我所在领域的期刊需要使用 APA 样式,我想知道是否可以将 table 转换为这种格式(例如,具有所有必需的边框、黑色而不是灰色的文本等) (见图 3)。如果 modelsummary 不能处理这个问题,我也愿意尝试其他包。非常感谢任何愿意提供帮助的人!
library(palmerpenguins)
library(tidyverse)
library(kableExtra)
library(modelsummary)
penguins <- penguins %>% as.data.frame() %>% select(species, bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g)
#scale variables for histogram and boxplot
pen_scaled <- penguins %>% select(bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g) %>%
mutate(across(where(is.numeric), ~scale(.))) %>% as.data.frame()
# create a list with individual variables and remove missing
pen_list <- lapply(pen_scaled, na.omit)
# create a table with `datasummary`
# add a histogram with column_spec and spec_hist
# add a boxplot with colun_spec and spec_box
emptycol <- function(x) " "
pen_table <- datasummary(All(penguins) ~ Mean + SD + Min + Median + Max + Heading("Boxplot") * emptycol + Heading("Histogram") * emptycol, data = penguins) %>%
column_spec(column = 7, image = spec_boxplot(pen_list)) %>%
column_spec(column = 8, image = spec_hist(pen_list))
pen_table
图一
pen_table2 <- datasummary_balance(~species, data = penguins, dinm = FALSE)
pen_table2
图2
图3
这里有两个问题:
- 如何改变table的外观?
- 如何创建具有给定形状(尚未具体定义)的 table?
问题 1
使用 kableExtra
包可以非常灵活地配置外观(modelsummary
通过 [=16= 还支持 gt
、huxtable
和 flextable
] 争论)。更改外观的一种简单方法是使用 kableExtra
中的 kable_classic()
函数,如下所示。如果您有更具体的需求,请参考kableExtra
文档:
- HTML: https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html
- LaTeX/PDF: http://haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf
问题 2
As noted in the documentation for datasummary()
,可以用一个1
来表示“全样本”。这是一个最小的例子:
library(palmerpenguins)
library(tidyverse)
library(kableExtra)
library(modelsummary)
penguins <- penguins %>% as.data.frame() %>% select(species, bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g)
# scale variables for histogram and boxplot
pen_scaled <- penguins %>% select(bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g) %>%
mutate(across(where(is.numeric), ~scale(.))) %>% as.data.frame()
pen_list <- lapply(pen_scaled, na.omit)
emptycol <- function(x) " "
datasummary(All(penguins) ~ Heading("Entire sample") * 1 * (Mean + SD + Min + Median + Max + Heading("Boxplot") * emptycol + Heading("Histogram") * emptycol) + species * (Mean + SD),
data = penguins) %>%
column_spec(column = 7, image = spec_boxplot(pen_list)) %>%
column_spec(column = 8, image = spec_hist(pen_list)) %>%
kable_classic()