gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:13:05 25 4
gpt4 key购买 nike

我想知道是否有一种方法可以使用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)

这给了我以下错误:

Error in names(x) <- value : 'names' attribute [11] must be the same length as the vector [3]

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

enter image description here

最佳答案

您可以使用 modelsummary 包中的 datasummary 函数来实现类似的功能(免责声明:我是维护者)。您将找到详细说明和many examples on the packages's website.

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

library(modelsummary)

`Mean ± SD` <- function(x) {
sprintf("%.0f ± %.0f", round(mean(x)), round(sd(x)))
}

清理变量标签:

dat <- mtcars
dat$am = ifelse(dat$am == 0, "automatic", "manual")
dat$vs = ifelse(dat$vs == 0, "v-shaped", "straight")

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

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

您将找到详细的说明和示例on the package website.可以使用 output 参数将该表导出为 HTML、LaTeX、Word 等:

datasummary(
mpg * (Min + Max + `Mean ± SD`) +
hp * (Min + Max + `Mean ± SD`) +
wt * (Min + Max + `Mean ± SD`) ~
am * vs + 1,
data = dat)

enter image description here

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

library(tidyverse)

dat <- mtcars %>%
select(mpg, wt, hp, am, vs) |>
mutate(am = ifelse(am == 0, "automatic", "manual"),
vs = ifelse(vs == 0, "v-shaped", "straight")) |>
pivot_longer(cols = c("mpg", "wt", "hp"),
names_to = "variables")

datasummary(
variables * (Min + Max + `Mean ± SD`) ~ value * am * vs + Heading(`All`) * value,
data = dat)

关于r - 如何使用stargazer按多个类别(组)创建汇总统计表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70300064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com