如何在R中一次性按多条件计算多个变量的条件均值?
在R中一次性计算多响应变量的分组条件均值
当然可以一次性处理多个响应变量,以下是几种常用实现方式:
1. aggregate函数
aggregate支持直接传入多列响应变量,两种写法都可行:
# 直接指定列的方式 aggregate(dat[, c('Y1', 'Y2')], by = list(F1 = dat$F1, F2 = dat$F2), FUN = mean) # 公式写法更简洁直观 aggregate(cbind(Y1, Y2) ~ F1 + F2, data = dat, FUN = mean)
2. dplyr包(group_by + mutate/summarise)
如果需要在原数据中新增各变量的分组均值列,用mutate;如果只需要分组后的汇总结果,用summarise配合across批量处理多列:
library(dplyr) # 保留原数据结构,新增分组均值列 dat %>% group_by(F1, F2) %>% mutate(mean_Y1 = mean(Y1), mean_Y2 = mean(Y2)) %>% ungroup() # 可选,取消分组状态 # 批量计算多列的分组均值并生成汇总表 dat %>% group_by(F1, F2) %>% summarise(across(c(Y1, Y2), mean, na.rm = TRUE), .groups = "drop")
注:加上na.rm = TRUE可以忽略缺失值,避免计算结果为NA
3. 适配ave函数处理多列
ave本身只支持单向量输入,但可以通过apply循环遍历每一列来实现多列处理:
# 对Y1、Y2分别计算分组均值,再和原数据合并 cbind(dat, apply(dat[, c('Y1', 'Y2')], 2, function(col) ave(col, dat$F1, dat$F2, FUN = mean)))
内容的提问来源于stack exchange,提问作者striatum
相关产品推荐
相关产品推荐

