You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用collapse包实现分组均值计算?

嘿,我来帮你把那段data.table的分组均值计算转换成collapse包的实现方式——collapse在这类分组聚合操作上不仅语法简洁,性能也相当出色!

首先先回顾你的原data.table代码逻辑:按Month分组,计算Ozone、Solar.R、Wind这三个变量的均值(忽略NA),并将结果作为带_mean后缀的新列添加到原数据中。

下面是几种用collapse包实现相同需求的方法:

方法1:批量新增列(最贴近你的原代码逻辑)

library(collapse)

# collapse直接支持data.frame,无需转成data.table
data_1 <- airquality
var_means <- c("Ozone", "Solar.R", "Wind")

# 用gby快速分组,fmean计算优化后的均值,直接赋值给新列
data_1[, paste0(var_means, "_mean")] <- fmean(gby(data_1, Month), var_means, na.rm = TRUE)

方法2:用transform一步生成结果

如果变量数量不多,也可以用transform配合gby直接生成包含新列的完整数据集:

data_1 <- transform(gby(airquality, Month), 
                    Ozone_mean = fmean(Ozone, na.rm = TRUE),
                    Solar.R_mean = fmean(Solar.R, na.rm = TRUE),
                    Wind_mean = fmean(Wind, na.rm = TRUE))

方法3:先计算均值再合并(适合复杂场景)

如果需要先单独查看分组均值结果,再合并回原数据,可以这么操作:

data_1 <- airquality
var_means <- c("Ozone", "Solar.R", "Wind")

# 先计算分组均值
grouped_means <- fmean(gby(data_1, Month), var_means, na.rm = TRUE)
# 按Month匹配合并,自动给均值列加上后缀
data_1 <- merge(data_1, grouped_means, by = "Month", suffixes = c("", "_mean"))

这些方法最终都会得到和你原data.table代码完全一致的结果:每个观测都带上了对应月份的目标变量均值。collapse的gby和fmean都是专门优化过的函数,在处理大型数据集时会比基础R甚至data.table更快哦~

内容的提问来源于stack exchange,提问作者Vitalijs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 21:07:45