多个表中的 stargazer() 字幕

stargazer() captions in multiple tables

我有一个数据集,其中包含一些要汇总的变量和一个组成员指标

df <- data.frame(var1 = rnorm(100), 
                 var2 = rnorm(100), 
                 group = rep(c("A","B"), each = 50))

我想分别为组 AB 生成摘要 table。我们可以使用 dplyrpurrr 来做到这一点,如下所示:

library(purrr)
library(dplyr)

df %>% split(. $group) %>% walk(~ stargazer(., type = "text", title = unique(df$group)))


A
==========================================================
Statistic N  Mean  St. Dev.  Min   Pctl(25) Pctl(75)  Max 
----------------------------------------------------------
var1      50 0.371  1.044   -2.350  -0.251   1.043   2.545
var2      50 0.014  0.849   -2.212  -0.407   0.584   1.710
----------------------------------------------------------

A
===========================================================
Statistic N   Mean  St. Dev.  Min   Pctl(25) Pctl(75)  Max 
-----------------------------------------------------------
var1      50 0.016   1.246   -2.432  -1.107   0.879   2.551
var2      50 -0.031  0.975   -2.713  -0.682   0.465   2.022
-----------------------------------------------------------

我天真地试图通过将 unique(df$group) 移交给 stargazer()title 参数来将组名引入为 table 标题。当我们这样做时,只使用提供的 table 标题向量的第一个元素,因此所有 tables 都有标题 A。是否有生成正确 table 字幕的解决方案?

您可以使用 iwalk 来传递数据和列表名称。

library(tidyverse)
library(stargazer)

df %>% 
  split(. $group) %>% 
  iwalk(~stargazer(.x, type = "text", title = .y))

A
===========================================================
Statistic N   Mean  St. Dev.  Min   Pctl(25) Pctl(75)  Max 
-----------------------------------------------------------
var1      50 -0.064  0.890   -2.265  -0.744   0.734   1.699
var2      50 -0.130  1.003   -2.404  -0.752   0.581   1.930
-----------------------------------------------------------

B
==========================================================
Statistic N  Mean  St. Dev.  Min   Pctl(25) Pctl(75)  Max 
----------------------------------------------------------
var1      50 0.086  0.823   -1.737  -0.476   0.742   1.736
var2      50 0.167  1.178   -1.709  -0.670   0.898   2.677
----------------------------------------------------------

您只需按如下方式更改现有代码即可完成此操作:

df %>% split(. $group) %>% walk(~ stargazer(., type = "text", title = .$group))

unique(df$group) 替换为 .$group 即可。不要忘记为 stargazer 添加库调用。原因是,通过使用 unique(df$group),您将长度为 2 的字符向量传递给 stargazer,根据定义,它只需要第一个参数。通过使用 .$group 取决于相应的组,您将获得正确的标题。

library(purrr)
library(dplyr)
library(stargazer)

df <- data.frame(var1 = rnorm(100), 
                 var2 = rnorm(100), 
                 group = rep(c("A","B"), each = 50))

df %>% split(. $group) %>% walk(~ stargazer(., type = "text", title = .$group))
    
A
===========================================================
Statistic N   Mean  St. Dev.  Min   Pctl(25) Pctl(75)  Max 
-----------------------------------------------------------
var1      50 -0.122  1.019   -3.582  -0.671   0.511   2.223
var2      50 0.082   1.077   -2.780  -0.702   0.841   2.203
-----------------------------------------------------------

B
===========================================================
Statistic N   Mean  St. Dev.  Min   Pctl(25) Pctl(75)  Max 
-----------------------------------------------------------
var1      50 0.023   0.971   -2.431  -0.706   0.609   2.299
var2      50 -0.041  1.039   -3.807  -0.626   0.718   1.950
-----------------------------------------------------------