You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 01:27:12