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

在R中创建带计数与百分比的列联表及美化方法咨询

在R中创建并美化分类变量与二元结果变量的列联表

1. 快速生成带计数与百分比的列联表

先构造示例数据

先模拟一组符合需求的数据,方便后续演示:

set.seed(123) # 固定随机种子,确保结果可重复
financial_class <- sample(c("低收入", "中收入", "高收入"), 200, replace = TRUE)
outcome <- sample(c(0, 1), 200, replace = TRUE, prob = c(0.6, 0.4))
# 把0/1转成带标签的因子,表格展示更直观
outcome <- factor(outcome, levels = c(0, 1), labels = c("No", "Yes"))
df <- data.frame(financial_class, outcome)

方法一:Base R 原生实现

原生代码无需额外装包,适合快速验证:

# 生成纯计数的列联表
count_table <- table(df$financial_class, df$outcome)
print("纯计数表:")
count_table

# 合并计数与行百分比(每个财务类别内Yes/No的占比)
table_with_pct <- apply(count_table, c(1,2), function(x) {
  pct <- round(prop.table(count_table, margin = 1)[which(count_table == x)] * 100, 1)
  paste0(x, " (", pct, "%)")
})
print("带计数与行百分比的表格:")
table_with_pct
  • prop.table(..., margin = 1):按行计算百分比,改成margin = 2可切换为按列计算
  • paste0:把计数和百分比拼接在同一单元格,提升可读性

方法二:用janitor包一键生成(推荐)

janitor包的tabyl函数专门处理交叉表,能直接输出计数+百分比,代码极简:

# 首次使用时安装包
# install.packages("janitor")
library(janitor)

# 一键生成带计数+行百分比的表格
tabyl_result <- tabyl(df, financial_class, outcome) %>%
  adorn_percentages("row") %>%  # 按行计算百分比,可选"col"/"total"
  adorn_pct_formatting(digits = 1) %>%  # 百分比保留1位小数
  adorn_ns()  # 在百分比前添加原始计数

tabyl_result
  • adorn_percentages:指定百分比的计算维度
  • adorn_pct_formatting:设置百分比的小数位数
  • adorn_ns:合并原始计数与百分比,避免表格冗余

2. 用kable/kableExtra美化表格

如果需要生成适合报告的美观表格,kable+kableExtra是绝佳选择:

# 首次使用时安装包
# install.packages("kableExtra")
library(kableExtra)

# 基础美化版
tabyl_result %>%
  kable(
    caption = "财务类别与结果变量的列联表(带计数与行百分比)",
    col.names = c("财务类别", "No", "Yes")  # 重命名列名
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),  # 条纹、悬停高亮、紧凑布局
    full_width = FALSE  # 不占满页面宽度
  ) %>%
  add_header_above(c(" " = 1, "结果" = 2)) %>%  # 添加顶部合并表头
  row_spec(0, bold = TRUE)  # 表头行加粗

# 带汇总行/列的进阶美化版
tabyl_result %>%
  adorn_totals(c("row", "col")) %>%  # 添加行和列的汇总
  kable(
    caption = "财务类别与结果变量的列联表(含汇总行/列)",
    col.names = c("财务类别", "No", "Yes", "总计")
  ) %>%
  kable_styling(bootstrap_options = "striped", full_width = FALSE) %>%
  add_header_above(c(" " = 1, "结果" = 2, " " = 1)) %>%
  row_spec(nrow(.), bold = TRUE, background = "#f0f0f0")  # 汇总行加粗+浅灰背景
  • kable_styling的bootstrap_options可切换预设样式,比如"bordered"添加边框
  • row_spec可自定义特定行样式,比如突出显示汇总行
  • add_header_above合并表头,让表格结构更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:20:30