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

如何在R中制作含总体汇总的分组拆分交叉表

R实现分层+总体交叉表合并输出方案

核心实现逻辑:先给原始数据集追加一份全量副本,将副本的level字段统一赋值为「总体」,再按level字段分组批量生成交叉表合并输出即可。

主流工具实现(tidyverse + janitor)

该方案代码简洁,支持自定义输出格式(计数、百分比、检验值等)

步骤1:加载依赖包与构造示例数据

# 加载依赖包
library(tidyverse)
library(janitor)

# 构造示例数据(替换为你自己的数据集即可)
set.seed(123)
df <- tibble(
  level = sample(c(1,2), 1000, replace = T, prob = c(0.4,0.6)),
  var1 = sample(c("是","否"), 1000, replace = T), # 替换为你要做交叉表的第一个变量
  var2 = sample(c("男","女"), 1000, replace = T) # 替换为你要做交叉表的第二个变量
)

步骤2:合并分组与全量数据集

df_with_total <- df %>%
  # 追加全量副本,level统一设为总体
  bind_rows(mutate(df, level = "总体"))

步骤3:生成合并交叉表

cross_table <- df_with_total %>%
  group_by(level) %>%
  group_modify(~ tabyl(.x, var1, var2) %>%
                 # 以下为自定义统计项,不需要可删除
                 adorn_percentages("row") %>% # 计算行百分比,改"col"为列百分比
                 adorn_pct_formatting(digits = 1) %>% # 百分比保留1位小数
                 adorn_ns() # 同时展示计数+百分比
  ) %>%
  ungroup()

步骤4:格式化输出(可选,用于报告导出)

library(flextable)
cross_table %>%
  flextable() %>%
  merge_v(j = "level") %>% # 合并相同level的单元格,可读性更高
  theme_booktabs()

基础R实现方案(无第三方依赖)

如果不需要复杂格式,仅需要输出计数结果,可以用基础R函数实现:

# 追加全量副本
df_total <- df
df_total$level <- "总体"
df_all <- rbind(df, df_total)

# 生成分层交叉表
ftable(xtabs(~ level + var1 + var2, data = df_all))

自定义调整说明

  • 不需要百分比仅保留计数的话,删除adorn_percentages、adorn_pct_formatting、adorn_ns三行代码即可
  • 需要追加组间卡方检验结果的话,在tabyl相关代码后追加adorn_chisq()
  • 要调整交叉表的变量顺序,修改tabyl(.x, 变量1, 变量2)的参数顺序即可

内容的提问来源于stack exchange,提问作者Log On

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 15:24:02