如何按通过结果、关联关系同时统计事件数与人数生成汇总表?
R语言按多字段分组统计事件数与人数的简洁实现
核心思路是无需拆分多次计算,通过一次分组聚合生成多维度统计结果,再通过长宽转换直接得到目标矩阵,省略手动填值的冗余步骤:
# 加载依赖包 library(tidyverse) # 统一设置Pass因子水平,避免多次重复定义,同时保留NA分组 df <- df %>% mutate(Pass = factor(Pass, levels = c("N", "Y", NA), exclude = NULL)) # 1. 按Relation+Pass分组统计事件数 event_stats <- df %>% group_by(Relation, Pass, .drop = FALSE) %>% summarise(event_count = n(), .groups = "drop") # 2. 统计分Relation+Pass的去重人数,同时追加全量不分Relation的人数统计 people_stats <- df %>% group_by(Relation, Pass, .drop = FALSE) %>% summarise(people_count = n_distinct(ID), .groups = "drop") %>% bind_rows( df %>% group_by(Pass, .drop = FALSE) %>% summarise(people_count = n_distinct(ID), .groups = "drop") %>% mutate(Relation = "ALL") ) # 3. 合并结果转为宽表,直接输出整理好的汇总矩阵 result <- event_stats %>% left_join(people_stats, by = c("Relation", "Pass")) %>% pivot_wider( id_cols = Pass, names_from = Relation, values_from = c(event_count, people_count) )
代码优化了你原实现中的冗余操作,也修正了events_rl部分filter语句缺少闭合括号的语法问题。运行后得到的result对象已经包含所有你需要的统计维度数据,无需手动拼接填值。
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

