如何多次使用filter函数按条件计算均值并追加至原数据集?
按条件分组计算平均值并追加到数据集
原始数据集
df <- data.frame(id = c(1,2,3,4,5,6,7), cond = c("Y", "Y", "N", "Y", "N", "Y", "N"), score = c(3,4,5,2,1,2,9))
方法一:使用dplyr包(tidyverse生态)
通过分组后生成对应组的平均值列,是最直观的处理方式:
library(dplyr) df_result <- df %>% group_by(cond) %>% mutate(average = mean(score)) %>% ungroup() # 按需取消分组状态,不影响最终结果展示 print(df_result)
运行后每个cond组的平均值会自动填充到该组所有行的average列,完全匹配你需要的效果。
方法二:Base R原生实现(无需额外包)
先计算分组均值,再通过匹配关联到原数据集:
# 计算每个cond对应的平均值 cond_means <- tapply(df$score, df$cond, mean) # 将均值匹配到原数据的每一行 df$average <- cond_means[match(df$cond, names(cond_means))] print(df)
tapply负责按cond分组计算均值,match函数完成每行cond与对应均值的关联,最终生成目标列。
内容的提问来源于stack exchange,提问作者cliu
相关产品推荐
相关产品推荐

