如何按分类变量分组生成含多变量的清晰描述性统计表格?
按ResJobLocationChoice分组的多变量统计表格解决方案
问题说明
需要基于分类变量ResJobLocationChoice(4个取值)分组,在一张表格中展示多个分类、连续变量的观测数n、均值、标准差、最值,此前尝试的tapply和stargazer代码无法适配多变量需求。
解决方案
使用dplyr批量处理连续变量的分组统计,结合tidyr整理分类变量的交叉计数,最后合并结果并输出表格。
1. 处理连续变量统计
针对Wage、CommuteTime、HousingPrice这类连续变量,一次性计算每个分组下的观测数、均值、标准差、最值:
library(dplyr) # 连续变量分组统计 continuous_stats <- data_df %>% group_by(ResJobLocationChoice) %>% summarise( across( c(Wage, CommuteTime, HousingPrice), # 指定需要统计的连续变量 list( n = ~n(), mean = ~mean(., na.rm = TRUE), sd = ~sd(., na.rm = TRUE), min = ~min(., na.rm = TRUE), max = ~max(., na.rm = TRUE) ), .names = "{.col}_{.fn}" # 生成带变量名和统计量的列名 ) )
2. 处理分类变量统计
针对Female这类分类变量,生成每个分组下各分类水平的观测数:
library(tidyr) # 分类变量分组计数 categorical_stats <- data_df %>% group_by(ResJobLocationChoice, Female) %>% count(name = "count") %>% pivot_wider( names_from = Female, values_from = count, names_prefix = "Female_" # 列名前缀区分分类变量 )
3. 合并统计结果并输出
将连续变量和分类变量的统计结果合并,再用stargazer或gt输出表格:
# 合并结果 final_table <- continuous_stats %>% left_join(categorical_stats, by = "ResJobLocationChoice") # 用stargazer输出文本格式表格 stargazer(final_table, type = "text", digits = 2, title = "居住-工作地点选择分组统计") # 用gt生成美观的可视化表格(可选) library(gt) final_table %>% gt() %>% tab_header(title = "居住-工作地点选择分组统计") %>% fmt_number(columns = contains(c("mean", "sd", "min", "max")), decimals = 2)
关键说明
across()函数实现了多变量的批量统计,避免重复编写代码pivot_wider()将分类变量的长格式计数转换为宽格式,方便和连续变量结果合并stargazer需传入最终的统计结果表而非原始分组数据,这是此前代码失败的核心原因
内容的提问来源于stack exchange,提问作者Ricardo Gomez
相关产品推荐
相关产品推荐

