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

R语言生成含交互X变量的三维频率表(带百分比)

多交互变量频率表的R实现方案

需求明确

需要生成包含2个交互分类变量(year、cat)和1个结果变量(google_cat)的频率表,要求:

  • 行结构:year为第一列,同一年份下依次展示不同cat类别
  • 统计内容:包含行/列合计值,优先显示列百分比,同时可附带行百分比
  • 数据集:bgt,包含年份、题型、结果三个字段

已尝试方法的局限

  • crosstable包:调整参数后无法实现year和cat在左侧联合分组的效果,要么cat被放到表头,要么两个变量被拆分
  • gmodels::CrossTable:不支持三变量交叉统计
  • xtabs+ftable:仅能生成基础频数表,无法直接添加百分比统计

推荐解决方案:gtsummary包

gtsummary是专为统计描述性表格设计的R包,支持多变量分层、自定义统计量,输出格式灵活且易复用,完美匹配需求。

步骤1:安装并加载包

# 首次使用需安装
install.packages("gtsummary")
library(gtsummary)

步骤2:生成目标表格

# 构建分层交叉表
freq_table <- bgt %>%
  # 按year做第一层分组
  tbl_strata(strata = year,
             .tbl_fun = function(sub_data) {
               sub_data %>%
                 # 以google_cat为列,cat为行变量做统计
                 tbl_summary(
                   by = google_cat,
                   include = cat,
                   type = all_categorical() ~ "categorical",
                   # 自定义统计格式:频数 (列百分比) [行百分比],保留0位小数
                   statistic = all_categorical() ~ "{n} ({p_col}%) [{p_row}%]",
                   # 始终显示缺失值
                   missing = "always"
                 ) %>%
                 # 添加列合计
                 add_overall(col_label = "合计")
             }) %>%
  # 为表头添加分组标注
  modify_spanning_header(all_stat_cols() ~ "**google_cat**")

# 查看表格(可直接转为flextable/html/LaTeX)
freq_table

效果说明

  • 表格自动按year分组,每个年份下展示所有cat类别,符合行结构要求
  • 统计内容包含频数、列百分比(优先)、行百分比,格式可通过statistic参数自由调整
  • 支持缺失值展示与合计行/列,输出可直接用于报告或进一步格式化

备选方案:tableone包

如果习惯更简洁的输出,可使用tableone包:

install.packages("tableone")
library(tableone)

# 生成交叉表
CreateTableOne(
  vars = "cat",
  strata = c("year", "google_cat"),
  data = bgt,
  includeNA = TRUE,
  test = FALSE,
  showAllLevels = TRUE
) %>% print(quote = FALSE, noSpaces = TRUE)

内容的提问来源于stack exchange,提问作者Jacob Bradshaw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:30:29