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

R语言用dplyr计算性别频数与占比出错,求问题原因

分组统计性别频数与占比的错误修正

问题原因

你猜的没错:当用group_by(gender)分组后,summarise函数的计算范围被限制在每个分组内部。此时sum(n)其实就是当前分组的样本数n(每组仅生成一个n值),所以n/sum(n)的结果恒为1,最终占比显示100%。

修正方案

以下几种方法都能正确计算整体占比:

方法1:提前计算总样本数

# 先获取数据框总行数
total <- nrow(df)

df %>% 
  group_by(gender) %>%
  summarise(
    频数 = n(),
    占比 = paste0(round(100 * 频数/total, 0), "%")
  )

方法2:在summarise中直接引用总行数

df %>% 
  group_by(gender) %>%
  summarise(
    频数 = n(),
    占比 = paste0(round(100 * 频数/nrow(df), 0), "%")
  )

方法3:用add_count添加总计数列

df %>% 
  add_count(name = "总样本数") %>%  # 给每行添加总样本数
  group_by(gender) %>%
  summarise(
    频数 = n(),
    占比 = paste0(round(100 * 频数/first(总样本数), 0), "%")
  )

运行任意一种方法,都会得到正确的结果:

# A tibble: 2 × 3
  gender 频数 占比  
  <chr>  <int> <chr> 
1 female     3 60%   
2 male       2 40%   

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:20:26