R语言按GROUP分组计算唯一CODE平均PRICE的实现问题
问题原因
原有代码使用mutate()仅会为每行赋值分组计算后的平均PRICE,不会修改原始数据的行数,所以同一GROUP+CODE组合的多条记录会全部保留,最终出现重复行。
最优解决方案(推荐,大数据集效率更高)
直接将mutate()替换为summarise()即可,summarise()会对每个分组仅返回1行结果,自动实现GROUP+CODE去重的需求:
library(dplyr) df <- df %>% group_by(GROUP, CODE) %>% summarise(PRICE = mean(PRICE), .groups = "drop")
其中.groups = "drop"参数可以直接取消分组,不需要额外调用ungroup()。
原有代码基础上修改的方案
如果需要保留你现有代码的逻辑,只需在末尾添加distinct()语句去重即可:
library(dplyr) df <- df %>% group_by(CODE, GROUP) %>% mutate(PRICE = mean(PRICE)) %>% ungroup() %>% distinct(GROUP, CODE, .keep_all = TRUE)
.keep_all = TRUE参数会保留去重后行的所有列数值,符合你的需求。
最终输出示例
使用你提供的测试数据运行后,结果如下,无重复行:
GROUP CODE PRICE <chr> <dbl> <dbl> 1 1T 349 0.64 2 1T 602 1.27 3 1T 622 1.96 4 2T 622 5.13 5 3T 343 7.99 6 3T 349 3.9 7 4T 320 5.64 8 4T 622 0.85
内容的提问来源于stack exchange,提问作者Bambeil
相关产品推荐
相关产品推荐

