r-使用dplyr计算与组平均值的差异



我想计算每一行与其组的平均值之间的差异。有没有一种方法可以做到这一点,而不需要创建一个中间表并连接它?

group_summary <- mtcars %>%
group_by(cyl) %>%
summarize(mean_mpg = mean(mpg))
left_join(mtcars, group_summary) %>%
mutate(mpg_diff_from_group = mpg - mean_mpg)

是的,以下在没有中间表的情况下工作:

mtcars %>%
group_by(cyl) %>%
mutate(grouped_diff = mpg - mean(mpg)) %>%
ungroup()

类似于以前的代码,您也可以总结数据,然后再次取消分组,而不是使用mutate

mtcars %>%
group_by(cyl) %>%
summarise(grouped_diff = mpg - mean(mpg)) %>%
ungroup
mtcars  %>% group_by(cyl)   %>% mutate(mean_mpg = mean(mpg), mpg_diff_from_grp= mpg - mean_mpg)  %>% ungroup()