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

如何计算不同分组下的计数均值(R语言场景)

问题描述

我觉得要实现的功能很简单,但一直搞不定。我有一列叫Random_ID,存的是参与者编码,总共16名参与者,分布在4所以School_ID标识的学校里。我的目标是计算每所学校的参与者人数(本例中每所学校结果都是4),并且要把方法推广到更大规模的参与者和学校数据中。求可行的解决办法。

示例数据
(df <- data.frame(
  Random_ID = c("A1", "A2", "A3", "A4", "A5", "A6","A7", "A8", "A9", "10", "A11", "A12", "A13", "A14", "A15", "A16"),
  School_ID = c("1", "2", "3", "4", "1", "2", "3", "4", "1", "2", "3", "4", "1", "2", "3", "4")
))

运行后输出:

Random_ID School_ID
1         A1         1
2         A2         2
3         A3         3
4         A4         4
5         A5         1
6         A6         2
7         A7         3
8         A8         4
9         A9         1
10        10         2
11       A11         3
12       A12         4
13       A13         1
14       A14         2
15       A15         3
16       A16         4
解决方法

以下几种方法都能轻松推广到大规模数据集,根据你的数据量级和使用习惯选择即可:

方法一:Base R 原生方法

不需要额外安装包,直接用R自带函数就能搞定:

  • 用table()统计分组人数,还能直接算均值:
# 统计每所学校的参与者人数
school_counts <- table(df$School_ID)
# 转成数据框查看明细
as.data.frame(school_counts)
# 计算各学校人数的均值
mean(school_counts)

输出结果:

Var1 Freq
1    1    4
2    2    4
3    3    4
4    4    4
[1] 4
  • 用aggregate()直接按分组统计:
aggregate(Random_ID ~ School_ID, data = df, FUN = length)

输出结果:

School_ID Random_ID
1         1         4
2         2         4
3         3         4
4         4         4

方法二:dplyr 包(tidyverse 生态)

dplyr是数据分析常用的工具包,语法直观易懂,处理大规模数据时性能稳定:

library(dplyr)

# 统计每校人数,如需计算均值再加一行即可
df %>%
  group_by(School_ID) %>%
  summarise(participant_count = n()) %>%
  # 可选:计算所有学校的参与者人数均值
  summarise(mean_count = mean(participant_count))

输出结果:

# A tibble: 1 × 1
  mean_count
       <dbl>
1          4

如果只需要每所学校的人数,去掉最后一行summarise(mean_count = mean(participant_count))就行。

方法三:data.table 包(超大规模数据首选)

如果你的数据量达到百万甚至千万级,data.table的速度和内存效率优势会很明显:

library(data.table)

# 将数据框转为data.table格式
dt <- as.data.table(df)

# 统计每校人数
dt[, .(participant_count = .N), by = School_ID]
# 计算各学校人数的均值
dt[, .(mean_count = mean(.N)), by = School_ID][, mean(mean_count)]

输出结果:

School_ID participant_count
1:         1                 4
2:         2                 4
3:         3                 4
4:         4                 4
[1] 4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:05:01