在R语言中获取分组计数的汇总统计信息的方法
解决分组计数的汇总统计问题
你要的是对分组后的计数结果做汇总统计,核心问题是之前的分组状态没取消,且mutate不适合做聚合类汇总(它是给每行新增数据),下面给几种简单实现方法:
方法1:取消分组后用summarize聚合
先按pid分组计数,取消分组后对计数列n做各类统计:
library(tidyverse) df = tibble(pid = c(1,2,2,3,3,3,4,4,4,4), y = rnorm(10)) df %>% group_by(pid) %>% count(pid) %>% ungroup() %>% # 必须取消分组,否则会按原pid分组统计(无意义) summarize( 最小计数 = min(n), 最大计数 = max(n), 平均计数 = mean(n), 中位数计数 = median(n), 分组总数 = n() )
运行后会得到一行汇总结果,包含你需要的各类统计值。
方法2:更简洁的直接计数+汇总
count(pid)本身已经是按pid分组后的计数结果,不需要额外group_by,可以简化成:
df %>% count(pid) %>% summarize( min_n = min(n), max_n = max(n), mean_n = round(mean(n), 2), total_groups = n() )
方法3:直接生成标准summary输出
如果想要R原生的summary结果(包含四分位数等),可以直接提取计数列后调用summary:
df %>% count(pid) %>% pull(n) %>% summary()
输出会是类似这样的标准统计结果:
Min. 1st Qu. Median Mean 3rd Qu. Max. 1 1 2 2 3 4
为什么之前的mutate会报错?
mutate的作用是给原数据的每一行新增列,而summary(n)返回的是长度为6的结果(min、1st Qu.、median、mean、3rd Qu.、max),和原数据的4行维度不匹配,所以会抛出错误。而summarize是把数据聚合为一行(或按指定分组聚合),刚好适合这类汇总需求。
内容的提问来源于stack exchange,提问作者aarsmith
相关产品推荐
相关产品推荐

