基于多因子对R语言data.frame行求均值的最优方案问询(多X变量)
解决R语言多变量按因子分组求均值的最优方法
嗨,这个问题我太熟了!当数据集里变量多到没法一个个列在公式里的时候,完全不用硬写所有变量名,下面给你几个亲测好用的方法,保证能快速生成你要的8行分组均值结果:
方法1:用dplyr(tidyverse系列,代码简洁易读)
如果你平时用tidyverse工具链,这个方法最顺手:
# 先加载dplyr包(如果没装先运行install.packages("dplyr")) library(dplyr) # 按f1和f2分组,对所有非分组变量求均值 df_mean <- df %>% group_by(f1, f2) %>% summarise_all(mean, na.rm = TRUE) # na.rm=TRUE用来处理缺失值,按需调整
summarise_all会自动对除了分组变量f1、f2之外的所有列应用均值函数,完美解决变量太多的问题!如果有个别变量不想计算,可以先加一步select(-不需要的列名)过滤。
方法2:Base R原生aggregate(不用额外装包)
你之前试过aggregate但没找到正确姿势?其实用.就能代表所有非分组变量:
# 用.代表所有非分组列,按f1+f2分组求均值 df_mean <- aggregate(. ~ f1 + f2, data = df, FUN = mean, na.rm = TRUE)
这个写法完全符合你用base R的需求,不用手动列所有变量名,直接生成8行分组结果。
方法3:data.table(大数据集首选,速度超快)
如果你的数据集特别大,data.table的性能优势会很明显:
# 先加载data.table包(没装的话运行install.packages("data.table")) library(data.table) # 转成data.table格式,按f1、f2分组计算所有列的均值 dt <- as.data.table(df) df_mean <- dt[, lapply(.SD, mean, na.rm = TRUE), by = .(f1, f2)]
这里的.SD代表“除分组变量外的所有列”,lapply会遍历每一列计算均值,处理百万级数据也毫无压力。
内容的提问来源于stack exchange,提问作者CiaranWelsh
相关产品推荐
相关产品推荐

