如何使用stargazer按多个类别(组)创建汇总统计表?

jck*_*k21 2 latex r summary stargazer

我想知道是否有一种方法可以使用stargazer(). 我从以下代码开始,但我不确定如何从这里继续。

library(mtcars)
mtcars2 <- within(mtcars, {
  vs <- factor(vs, labels = c("V", "S"))
  am <- factor(am, labels = c("automatic", "manual"))
  cyl  <- ordered(cyl)
  gear <- ordered(gear)
  carb <- ordered(carb)
})
summary1 = summary(mtcars2)
stargazer(summary1)
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

名称(x) <- 值中的错误:“名称”属性 [11] 的长度必须与向量 [3] 的长度相同

使用或其他类似的软件包,我想制作一个按传输( )和引擎( )stargazer()分类的汇总统计表,并以以下方式呈现。amvs

在此输入图像描述

Vin*_*ent 5

datasummary您可以使用包中的函数来实现类似的功能modelsummary(免责声明:我是维护者)。您可以在软件包的网站上找到详细的描述和许多示例。

\n

加载库并定义自定义函数来创建平均值+/-标准差。我们使用反引号是因为我们的函数名称包含空格。请注意,由于 unicode 字符的原因,这可能无法在 Windows 上运行。

\n
library(modelsummary)\n\n`Mean \xc2\xb1 SD` <- function(x) { \n    sprintf("%.0f \xc2\xb1 %.0f", round(mean(x)), round(sd(x)))\n}\n
Run Code Online (Sandbox Code Playgroud)\n

清理变量标签:

\n
dat <- mtcars\ndat$am = ifelse(dat$am == 0, "automatic", "manual")\ndat$vs = ifelse(dat$vs == 0, "v-shaped", "straight")\n
Run Code Online (Sandbox Code Playgroud)\n

最后,我们用来datasummary创建表。有几点需要注意:

\n
    \n
  • 行位于公式的左侧
  • \n
  • 列位于公式的右侧
  • \n
  • 由 a 连接起来的统计数据和变量+将依次显示。
  • \n
  • 由 a 连接的统计数据和变量*将相互“嵌套”。
  • \n
  • 括号可用于嵌套多个变量/统计数据
  • \n
  • 1是“全部”的快捷方式。
  • \n
\n

您可以在软件包网站上找到详细的说明和示例。可以使用参数将该表导出为 HTML、LaTeX、Word 等output

\n
datasummary(\n    mpg * (Min + Max + `Mean \xc2\xb1 SD`) +\n    hp * (Min + Max + `Mean \xc2\xb1 SD`) +\n    wt * (Min + Max + `Mean \xc2\xb1 SD`) ~\n    am * vs + 1,\n    data = dat)\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n

另一种方法是预先重塑数据。这样,您就不需要在公式中单独指定每个变量:

\n
library(tidyverse)\n\ndat <- mtcars %>%\n    select(mpg, wt, hp, am, vs) |>\n    mutate(am = ifelse(am == 0, "automatic", "manual"),\n           vs = ifelse(vs == 0, "v-shaped", "straight")) |>\n    pivot_longer(cols = c("mpg", "wt", "hp"),\n                 names_to = "variables")\n\ndatasummary(\n    variables * (Min + Max + `Mean \xc2\xb1 SD`) ~ value * am * vs + Heading(`All`) * value,\n    data = dat)\n
Run Code Online (Sandbox Code Playgroud)\n