如何使用group_by按条件分组聚合:将符合条件的行合并为OTHER组
实现方法
不需要group_by()提供特殊的定向分组参数,直接在分组时自定义分组键的映射规则,就能实现「符合条件的行合并为一组、其余行各自保留独立分组」的效果,以给出的样例数据为例,dplyr实现代码如下:
library(dplyr) df2 <- df1 %>% # 构造分组规则:count<10的行统一分配到OTHER组,其余行用原company_location作为分组标识 group_by(company_location = ifelse(count < 10, "OTHER", company_location)) %>% # 按分组对count求和 summarise(count = sum(count), .groups = "drop") %>% # 调整顺序,把OTHER行放到末尾,和目标结果格式对齐 arrange(company_location == "OTHER", company_location)
逻辑说明
- 所有满足
count < 10条件的行,不管原本的company_location是什么值,都会被赋予相同的分组值OTHER,自然会被聚合为同一行,求和后count值为JP(6)+HN(1)+HU(1)=8,和预期一致 - 不满足
count < 10条件的行,直接保留原company_location作为分组值,不同location的行分组键互不相同,因此会各自保留独立分组,不会和其他行合并,原始count值也会完整保留
运行代码后得到的结果和目标df2完全一致:
# A tibble: 4 × 2 company_location count <chr> <int> 1 DE 28 2 GB 47 3 US 355 4 OTHER 8
如果原始数据中本身就存在
company_location取值为OTHER的记录,为了避免分组冲突,可以先给待聚合的行分配一个不会和原始值重复的临时分组标签,聚合完成后再重命名为OTHER即可。
内容的提问来源于stack exchange,提问作者Pippomuc
相关产品推荐
相关产品推荐

