在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
相关产品推荐
相关产品推荐

