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

在R中生成含分类变量各类别频数的汇总统计表

解决思路

方法1:用gtsummary包(推荐)

这个包专门针对统计摘要表格设计,对分类变量的频数展示支持非常友好,默认会展开每个类别并显示频数+百分比,完全匹配你的需求。

  1. 安装并加载包:
install.packages("gtsummary")
library(gtsummary)
  1. 生成目标表格:
    假设你的数据集为df,要分析的变量包含连续变量age、income,分类变量gender、education:
tbl_summary(
  df,
  include = c(age, income, gender, education), # 指定需统计的变量
  type = list(age ~ "continuous", income ~ "continuous"), # 明确连续变量类型
  statistic = list(
    continuous ~ "{mean} ({sd})", # 连续变量显示均值±标准差,可自定义格式
    categorical ~ "{n} ({p}%)" # 分类变量显示频数+百分比
  )
) %>%
  add_overall() # 可选:添加总览行

方法2:手动整理数据+knitr::kable

如果需要极致自定义格式,可以手动提取统计量后组合成数据框,再用kable输出。

  1. 定义统计量提取函数:
library(dplyr)
library(purrr)
library(knitr)

# 提取连续变量统计量(均值+标准差)
get_continuous <- function(data, var) {
  x <- data[[var]]
  tibble(
    变量 = var,
    类别 = NA,
    统计值 = paste0(round(mean(x, na.rm = T), 2), " (", round(sd(x, na.rm = T), 2), ")")
  )
}

# 提取分类变量频数+占比
get_categorical <- function(data, var) {
  x <- data[[var]]
  table(x, useNA = "ifany") %>%
    as.data.frame() %>%
    mutate(
      占比 = round(Freq / sum(Freq) * 100, 1),
      统计值 = paste0(Freq, " (", 占比, "%)")
    ) %>%
    rename(类别 = x) %>%
    mutate(变量 = var) %>%
    select(变量, 类别, 统计值)
}
  1. 组合并输出表格:
# 定义变量分组
连续变量 <- c("age", "income")
分类变量 <- c("gender", "education")

# 提取并合并统计结果
连续统计 <- map_dfr(连续变量, ~get_continuous(df, .x))
分类统计 <- map_dfr(分类变量, ~get_categorical(df, .x))
总统计 <- bind_rows(连续统计, 分类统计)

# 输出表格
kable(总统计, align = "lcc", caption = "汇总统计信息")

方法3:用flextable做样式定制

如果需要调整表格样式(比如合并单元格、自定义字体/边框),可以基于gtsummary的结果转成flextable:

install.packages("flextable")
library(flextable)

tbl_summary(df, include = c(age, income, gender, education)) %>%
  as_flextable() %>%
  autofit() %>%
  set_caption("汇总统计信息") %>%
  bold(part = "header") # 可选:表头加粗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:50:40