在R语言中对DataFrame分组统计总行数及各列唯一值数量
解决方案
你可以直接通过dplyr的group_by() + summarize()一步完成所需的聚合统计,不需要拆分多个数据集再合并,具体代码如下:
library(dplyr) # 核心聚合逻辑 result <- df1 %>% group_by(col1) %>% summarize( 总行数 = n(), # 统计每组col1的总行数 col2唯一值数量 = n_distinct(col2), # 统计每组内col2的唯一值个数 col3唯一值数量 = n_distinct(col3) # 统计每组内col3的唯一值个数 ) # 调整列名匹配你的预期格式 result <- result %>% rename( col1 = col1, col2 = col2唯一值数量, col3 = col3唯一值数量 ) %>% relocate(col1, .before = everything()) print(result)
运行后会输出你期望的结果:
# A tibble: 2 × 3 col1 col2 col3 <chr> <int> <int> 1 A 5 2 3 2 B 6 4 5
为什么你的原有方法无法得到结果?
你拆分多个count()再合并的思路会生成大量重复分组行(比如count(col1, col2)会输出每个col1-col2组合的计数),合并后无法直接提取每组的唯一值数量,反而增加了不必要的处理复杂度。而n_distinct()可以直接在分组后统计指定列的唯一值个数,n()直接统计分组内的总行数,一步完成所有需求。
内容的提问来源于stack exchange,提问作者Sid5427
相关产品推荐
相关产品推荐

