如何用R生成带多维度分组的Latex格式高级汇总统计表?
高级汇总统计表构建求助
我已经尝试过stargazer等R包,但还是无法构建符合要求的高级汇总统计表。
当前数据集结构
> str(df_All) tibble [5,064 × 29] (S3: tbl_df/tbl/data.frame) $ Net_IRR : num [1:5064] 15.9 1.75 46 20 18.4 ... $ Age : num [1:5064] 1 1 1 1 1 1 1 1 1 1 ... $ Ln_Age : num [1:5064] 0 0 0 0 0 0 0 0 0 0 ... $ Fund_Sequence : num [1:5064] 1 1 1 1 1 1 1 1 1 1 ... $ Ln_Fund_Sequence : num [1:5064] 0 0 0 0 0 0 0 0 0 0 ... $ Fund_Size : num [1:5064] 50 46 423 96.9 81 ... $ Ln_Fund_Size : num [1:5064] 3.91 3.83 6.05 4.57 4.39 ... $ Nr_Funds : num [1:5064] 1 1 1 1 1 1 1 1 1 1 ... $ HHI_Industry : num [1:5064] 0.427 0.243 0.36 0.333 1 ... $ HHI_Region : num [1:5064] 1 1 1 1 1 ... $ Stock_Market_Returns : num [1:5064] 0.11936 -0.00711 -0.00643 -0.03869 -0.01931 ... $ GDP_Growth : num [1:5064] 0.0284 0.0245 0.0261 0.0304 0.0104 ... $ Net_Multiple : num [1:5064] 3.3 1.09 4.04 2.73 1.95 ... $ Ln_Fund_Size^2 : num [1:5064] 15.3 14.7 36.6 20.9 19.3 ... $ Size_Q1 : num [1:5064] 41.5 42.5 123.8 109.8 85.5 ... $ Size_Q2 : num [1:5064] 125.8 92.8 325.5 232 177.3 ... $ Size_Q3 : num [1:5064] 211 206 756 624 302 ... $ Size_Q4 : num [1:5064] 1000 1500 6114 5887 2600 ... $ Size_Spline_1 : num [1:5064] 0 0 0 1 1 1 0 1 0 0 ... $ Size_Spline_2 : num [1:5064] 1 1 0 0 0 0 0 0 1 0 ... $ Size_Spline_3 : num [1:5064] 0 0 1 0 0 0 1 0 0 1 ... $ Size_Spline_4 : num [1:5064] 0 0 0 0 0 0 0 0 0 0 ... $ Dummy_First_Time_Fund: num [1:5064] 1 1 1 1 1 1 1 1 1 1 ... $ Dummy_Industry : num [1:5064] 1 0 0 0 1 0 0 1 1 0 ... $ Dummy_Region : num [1:5064] 1 1 1 1 1 1 1 1 1 1 ... $ Fund_ID : num [1:5064] 8360 3491 5576 48689 6016 ... $ Vintage_Year : num [1:5064] 2002 2004 2000 1997 2006 ... $ Asset_Class : chr [1:5064] "Venture Capital" "Venture Capital" "Private Equity" "Private Equity" ... $ Region_Focus : chr [1:5064] "North America" "North America" "North America" "Europe" ...
需求说明
需要生成LaTeX格式的汇总统计表,具体要求如下:
1. 垂直维度
需包含以下指标,每个指标展示中位数(Median)、均值(Mean)、最小值(Min)、最大值(Max)、标准差(Standard Deviation):
- 基金数量
- 基金规模(Fund size,单位:百万美元)
- IRR(单位:%)
- Multiple(单位:倍)
2. 水平面板
按以下分组生成面板,每个面板内再进行子维度拆分:
- 全样本
- Private Equity
- Private Debt
- Real Estate
- Infrastructure
每个面板内的子维度拆分:
- 区域聚焦(Regional focus):北美(North America)、欧洲(Europe)、其他(Other)
- 基金规模区间:<1亿美元、1亿-5亿美元、5亿-10亿美元、10亿美元以上
- 基金序列区间:1、2-3、4-5、5以上
- #Funds
- Age
- HHI Industry
- HHI Region
解决方案建议
stargazer灵活性不足,推荐用以下R包组合实现复杂分组汇总表:
步骤1:数据预处理
先创建所需的分组变量:
library(dplyr) df_All <- df_All %>% # 生成基金规模区间 mutate(Size_Group = case_when( Fund_Size < 100 ~ "< $100 mn", Fund_Size >=100 & Fund_Size <500 ~ "100 to $500 mn", Fund_Size >=500 & Fund_Size <1000 ~ "$500mn to $1bn", Fund_Size >=1000 ~ "more than $1bn" )) %>% # 生成基金序列区间 mutate(Sequence_Group = case_when( Fund_Sequence ==1 ~ "1", Fund_Sequence >=2 & Fund_Sequence <=3 ~ "2–3", Fund_Sequence >=4 & Fund_Sequence <=5 ~ "4-5", Fund_Sequence >5 ~ "more than 5" )) %>% # 统一区域分组 mutate(Region_Focus = ifelse(!Region_Focus %in% c("North America", "Europe"), "Other", Region_Focus))
步骤2:生成汇总统计数据
用dplyr完成分组与统计量计算:
# 分类样本统计 summary_stats <- df_All %>% group_by(Asset_Class, Region_Focus, Size_Group, Sequence_Group) %>% summarise( # 基金数量 N = n(), # 基金规模统计 FundSize_Median = median(Fund_Size, na.rm=T), FundSize_Mean = mean(Fund_Size, na.rm=T), FundSize_Min = min(Fund_Size, na.rm=T), FundSize_Max = max(Fund_Size, na.rm=T), FundSize_SD = sd(Fund_Size, na.rm=T), # IRR统计(转百分比) IRR_Median = median(Net_IRR, na.rm=T)*100, IRR_Mean = mean(Net_IRR, na.rm=T)*100, IRR_Min = min(Net_IRR, na.rm=T)*100, IRR_Max = max(Net_IRR, na.rm=T)*100, IRR_SD = sd(Net_IRR, na.rm=T)*100, # Multiple统计 Multiple_Median = median(Net_Multiple, na.rm=T), Multiple_Mean = mean(Net_Multiple, na.rm=T), Multiple_Min = min(Net_Multiple, na.rm=T), Multiple_Max = max(Net_Multiple, na.rm=T), Multiple_SD = sd(Net_Multiple, na.rm=T), # 其他指标统计 Age_Median = median(Age, na.rm=T), Age_Mean = mean(Age, na.rm=T), HHI_Industry_Median = median(HHI_Industry, na.rm=T), HHI_Industry_Mean = mean(HHI_Industry, na.rm=T), HHI_Region_Median = median(HHI_Region, na.rm=T), HHI_Region_Mean = mean(HHI_Region, na.rm=T), .groups = "drop" ) # 全样本统计 full_sample_stats <- df_All %>% group_by(Region_Focus, Size_Group, Sequence_Group) %>% summarise( N = n(), FundSize_Median = median(Fund_Size, na.rm=T), FundSize_Mean = mean(Fund_Size, na.rm=T), FundSize_Min = min(Fund_Size, na.rm=T), FundSize_Max = max(Fund_Size, na.rm=T), FundSize_SD = sd(Fund_Size, na.rm=T), IRR_Median = median(Net_IRR, na.rm=T)*100, IRR_Mean = mean(Net_IRR, na.rm=T)*100, IRR_Min = min(Net_IRR, na.rm=T)*100, IRR_Max = max(Net_IRR, na.rm=T)*100, IRR_SD = sd(Net_IRR, na.rm=T)*100, Multiple_Median = median(Net_Multiple, na.rm=T), Multiple_Mean = mean(Net_Multiple, na.rm=T), Multiple_Min = min(Net_Multiple, na.rm=T), Multiple_Max = max(Net_Multiple, na.rm=T), Multiple_SD = sd(Net_Multiple, na.rm=T), Age_Median = median(Age, na.rm=T), Age_Mean = mean(Age, na.rm=T), HHI_Industry_Median = median(HHI_Industry, na.rm=T), HHI_Industry_Mean = mean(HHI_Industry, na.rm=T), HHI_Region_Median = median(HHI_Region, na.rm=T), HHI_Region_Mean = mean(HHI_Region, na.rm=T), .groups = "drop" ) %>% mutate(Asset_Class = "Full Sample") # 合并数据 summary_stats <- bind_rows(full_sample_stats, summary_stats)
步骤3:生成LaTeX表格
用gt包生成支持分层表头的复杂表格:
library(gt) # 生成LaTeX表格 summary_stats %>% gt(groupname_col = "Asset_Class") %>% tab_spanner_delim(delim = "_") %>% cols_label( Region_Focus = "Region", Size_Group = "Size Group", Sequence_Group = "Sequence Group", N = "N", FundSize_Median = "Median", FundSize_Mean = "Mean", FundSize_Min = "Min", FundSize_Max = "Max", FundSize_SD = "SD", IRR_Median = "Median", IRR_Mean = "Mean", IRR_Min = "Min", IRR_Max = "Max", IRR_SD = "SD", Multiple_Median = "Median", Multiple_Mean = "Mean", Multiple_Min = "Min", Multiple_Max = "Max", Multiple_SD = "SD", Age_Median = "Median", Age_Mean = "Mean", HHI_Industry_Median = "Median", HHI_Industry_Mean = "Mean", HHI_Region_Median = "Median", HHI_Region_Mean = "Mean" ) %>% tab_header( title = "Summary Statistics by Asset Class and Subgroups", subtitle = "Descriptive Statistics of Fund Characteristics" ) %>% fmt_number(columns = contains("_"), decimals = 2) %>% as_latex() %>% cat(file = "summary_table.tex")
注意事项
- 数据含缺失值时,确保
na.rm=T参数正确设置 - 可通过
gt的tab_style函数自定义表格样式(边框、字体等),贴近目标格式
内容的提问来源于stack exchange,提问作者Stefano Pesce
相关产品推荐
相关产品推荐

