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