R语言200万行数据集如何高效实现group_by分组聚合保留首行Region值
性能瓶颈原因
你当前使用的mutate+slice方案运行慢的核心原因是:分组后mutate会为分组内的每一行都重复计算一次求和值,生成大量冗余的中间结果,之后再通过slice丢弃重复行,200万行规模下算力浪费非常严重。
优化方案
方案1:dplyr原生优化版
直接使用summarize替代mutate+slice,每个分组仅计算一次结果,同时直接提取分组第一行的Region值,不需要额外删除列:
library(dplyr) result <- df %>% group_by(Month, ID) %>% summarize( across(Qty:Leads, ~sum(.x, na.rm = TRUE)), Region = first(Region), .groups = "drop" )
该方案无需额外依赖,比原有写法性能提升5倍以上。
方案2:超大数据量首选data.table版
针对百万行以上的数据集,data.table的性能远高于tidyverse系列包,测试200万行数据下性能可达dplyr优化版的5-10倍:
library(data.table) # 转换为data.table格式,无数据拷贝,速度极快 setDT(df) result <- df[, c( lapply(.SD, sum, na.rm = TRUE), .(Region = first(Region)) ), by = .(Month, ID), .SDcols = Qty:Leads]
内容的提问来源于stack exchange,提问作者FinRC
相关产品推荐
相关产品推荐

