问题描述
我有一个数据集,其中包含一些要汇总的变量和一个组成员资格指标
df <- data.frame(var1 = rnorm(100),var2 = rnorm(100),group = rep(c("A","B"),each = 50))
我想分别为 A
和 B
组生成汇总表。我们可以使用 dplyr
和 purrr
执行此操作,如下所示:
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)
移交给 title
的 stargazer()
参数来将组名称引入为表格标题。当我们这样做时,只使用提供的表格标题向量的第一个元素,因此所有表格都有标题 A
。是否有导致正确表格标题的解决方案?
解决方法
您只需按如下方式更改现有代码即可完成此操作:
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(.,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
-----------------------------------------------------------
,
您可以使用 iwalk
来传递数据和列表名称。
library(tidyverse)
library(stargazer)
df %>%
split(. $group) %>%
iwalk(~stargazer(.x,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
----------------------------------------------------------