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

如何高效生成N(%)格式的分类变量汇总表?

如何高效生成N(%)格式的分类变量汇总表?

嘿,我来给你几个实用又高效的解决方案,帮你快速生成想要的N(%)格式分类变量汇总表~

方法一:基础R自定义函数(适合习惯原生R的场景)

既然你已经想到了table()和prop.table(),那我们可以把这两个工具封装成一个自定义函数,不用重复写代码就能快速处理每个分类变量:

# 定义生成N(%)汇总的函数
tab_summary <- function(var) {
  # 计算频数
  freq_table <- table(var)
  # 计算百分比并转成百分比数值
  pct_values <- prop.table(freq_table) * 100
  # 按照需求拼接格式,sprintf控制小数位数和补零(实现09.3%这类格式)
  formatted_result <- paste0(freq_table, " [", sprintf("%04.1f", pct_values), "%]")
  # 转成易读的数据框格式
  data.frame(类别 = names(freq_table), `N [%]` = formatted_result, row.names = NULL)
}

# 加载数据并应用函数
data("mtcars")

# 处理am变量
tab_summary(mtcars$am)
# 处理gear变量
tab_summary(mtcars$gear)
# 处理carb变量
tab_summary(mtcars$carb)

如果不需要补零效果,把sprintf("%04.1f", pct_values)改成sprintf("%.1f", pct_values)就可以啦。

方法二:tidyverse管道风格(适合数据流程化处理)

如果你平时习惯用tidyverse系列包,用dplyr+tidyr的管道操作会更流畅,代码可读性也更高:

library(tidyverse)

# 定义通用的分类变量汇总函数
summarize_cat <- function(df, var) {
  df %>%
    # 计算每个类别的频数
    count({{var}}) %>%
    # 计算百分比
    mutate(pct = n / sum(n) * 100,
           # 拼接成N(%)格式
           `N [%]` = paste0(n, " [", sprintf("%04.1f", pct), "%]")) %>%
    # 只保留需要的列
    select({{var}}, `N [%]`)
}

# 应用到各个变量
summarize_cat(mtcars, am)
summarize_cat(mtcars, gear)
summarize_cat(mtcars, carb)

这里的{{var}}是tidy eval语法,用来灵活传递变量名,让函数适配不同的分类变量。

方法三:janitor包快捷生成(最省心的方案)

janitor包专门为数据清洗和汇总设计,其中的tabyl()函数可以一键生成频数百分比表,配合辅助函数就能快速得到你想要的格式:

library(janitor)

# 处理am变量的示例
mtcars %>%
  # 生成基础的频数百分比表
  tabyl(am) %>%
  # 格式化百分比,保留1位小数
  adorn_pct_formatting(digits = 1, rounding = "half up") %>%
  # 把频数加到百分比前面
  adorn_ns(position = "front") %>%
  # 拼接成你需要的N(%)格式
  mutate(`N [%]` = paste0(n, " [", percent, "]")) %>%
  # 调整列顺序
  select(am, `N [%]`)

# 同理处理gear和carb变量
mtcars %>%
  tabyl(gear) %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns(position = "front") %>%
  mutate(`N [%]` = paste0(n, " [", percent, "]")) %>%
  select(gear, `N [%]`)

这个方法几乎不用手动计算,几行代码就能搞定,非常高效省心。

这些方法都能帮你快速生成符合要求的汇总表,你可以根据自己的代码习惯选择合适的方案~

备注:内容来源于stack exchange,提问作者King Frazier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:58:07