R语言中一次性聚合data frame多列并对不同列计算不同统计量的方法咨询
R DataFrame 按列分组多统计量聚合方案
需求说明
按name列分组,针对不同列分别计算对应统计量:
- v1:均值
- v2:标准差
- v3:最大值
- v4:总和
推荐方案:tidyverse/dplyr 实现
这是目前R生态中最简洁的分组聚合实现方式,原生支持不同列指定不同聚合函数:
# 未安装依赖先执行 install.packages("dplyr") library(dplyr) # 替换df为你自己的数据集变量名 agg_result <- df %>% # 按name列分组 group_by(name) %>% # 分别对不同列执行指定统计计算,na.rm=TRUE自动忽略空值/NaN summarise( v1_mean = mean(v1, na.rm = TRUE), v2_sd = sd(v2, na.rm = TRUE), v3_max = max(v3, na.rm = TRUE), v4_sum = sum(v4, na.rm = TRUE) )
注意:如果单个name分组下只有1条数据,标准差计算结果会返回NaN,属于正常统计逻辑,单个值无标准差
基础R aggregate 实现
基础包的aggregate函数原生不支持直接为不同列指定不同聚合函数,需分开计算后合并:
# 分别计算各列统计量 v1_agg <- aggregate(v1 ~ name, data = df, FUN = mean, na.rm = TRUE) v2_agg <- aggregate(v2 ~ name, data = df, FUN = sd, na.rm = TRUE) v3_agg <- aggregate(v3 ~ name, data = df, FUN = max, na.rm = TRUE) v4_agg <- aggregate(v4 ~ name, data = df, FUN = sum, na.rm = TRUE) # 合并所有统计结果 agg_result <- merge(merge(merge(v1_agg, v2_agg, by = "name"), v3_agg, by = "name"), v4_agg, by = "name") # 重命名列名 colnames(agg_result) <- c("name", "v1_mean", "v2_sd", "v3_max", "v4_sum")
内容的提问来源于stack exchange,提问作者DataScienceDave
相关产品推荐
相关产品推荐

