在R语言中如何高效获取分组计数与总体计数的合并结果?
精简实现班级与整体性别分布统计
你可以通过dplyr的代码块结合bind_rows一步完成需求,无需创建独立的中间对象再合并,代码更紧凑高效:
精简代码
library(dplyr) # 示例数据集 test_data <- tibble(id = c(1, 1, 2, 2, 2, 3, 3, 3), class = c("h", "h", "m", "h", "s", "m", "h", "h"), gender = c("m", "m", "f", "f", "f", "m", "m", "m")) # 一步生成包含班级分组与整体统计的结果 gender_stats <- test_data %>% distinct(id, class, gender) %>% { # 班级维度的性别计数 class_counts <- group_by(., class) %>% count(gender) %>% ungroup() # 整体维度的性别计数 overall_counts <- distinct(., id, gender) %>% count(gender) %>% mutate(class = "overall") # 合并两类统计结果 bind_rows(class_counts, overall_counts) } gender_stats
代码说明
- 先用
distinct(id, class, gender)去重,保证每个学生在对应班级的性别记录只统计一次 - 利用
{}代码块在管道流内同时处理两个统计分支,避免生成全局中间变量 - 用
bind_rows替代原代码的full_join,因为两类统计结果结构完全一致,合并效率更高
输出结果
# A tibble: 6 × 3 class gender n <chr> <chr> <int> 1 h m 2 2 m f 1 3 m m 1 4 s f 1 5 overall m 2 6 overall f 1
内容的提问来源于stack exchange,提问作者J.Sabree
相关产品推荐
相关产品推荐

