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

如何在R中按分组统计列值的出现次数及占比

当然有啦!这里有几种超简便的R代码实现方式,不管你是偏好base R原生语法,还是习惯用tidyverse这类工具包,都能轻松搞定你的统计需求~

方法1:Base R 原生实现

先构造你的示例数据集,然后用内置函数就能快速统计数量和占比:

# 构造示例数据
df <- data.frame(
  Group = c(1,1,1,2,1,2,2),
  Smoker = c("Ex", "None", "None", "Current", "Current", "Ex", "None")
)

# 统计各分组下不同吸烟者类型的数量
count_table <- table(df$Group, df$Smoker)
cat("各分组吸烟者类型数量:\n")
print(count_table)

# 计算各分组内的占比(按行计算,即每个Group内部的百分比)
prop_table <- prop.table(count_table, margin = 1) * 100
cat("\n各分组吸烟者类型占比(%):\n")
print(prop_table)

这里的prop.table()函数通过margin = 1指定按行(也就是每个Group)计算占比,直接得到每个分组内不同吸烟类型的占比情况。

方法2:用dplyr(tidyverse)实现更直观的统计

如果你习惯用tidyverse的链式语法,代码会更易读,且扩展性更强:

library(dplyr)

# 统计数量+计算占比
result <- df %>%
  group_by(Group, Smoker) %>%
  summarise(Count = n(), .groups = "drop") %>%  # 先统计各组合的数量
  group_by(Group) %>%
  mutate(Proportion = paste0(round(Count / sum(Count) * 100, 1), "%"))  # 计算分组内占比并格式化

print(result)

这段代码先按Group和Smoker分组统计数量,再回到Group层级计算每个吸烟类型的占比,最后把占比格式成带百分号的字符串,结果一目了然。

方法3:用janitor包一键生成美观的统计表格

如果想要直接得到同时包含数量和百分比的漂亮表格,可以用janitor包的tabyl()函数,一步到位:

library(janitor)

# 生成带数量和占比的统计表格
df %>%
  tabyl(Group, Smoker) %>%
  adorn_percentages("row") %>%  # 按行计算占比
  adorn_pct_formatting(digits = 1) %>%  # 格式化百分比
  adorn_ns()  # 同时显示数量

这个输出的表格会把数量和百分比放在同一单元格里,非常适合快速查看和分享结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:52:08