如何创建一个包含从 group_by 中退役的值的列 (dplyr)

How to create a column with values retired from a group_by (dplyr)

假设我们有以下 data.frame:

df <- data.frame( a=c( 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3),
                  b=c('x','x','y','y','v','v','w','w','x','x','y','y')
                 )

我想要做的是创建一个列 'd' 这样 d 将是对每个组的操作添加到 a 的值。例如,假设 'd' 等于 'a' 的每个值减去每个组的 'a' 的平均值。我们有:

new_df <- data.frame(a=c( 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3),
                     b=c('x','x','y','y','v','v','w','w','x','x','y','y'),
                     d=c(-1 , -1, -1, -1, 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1)

有没有办法使用 dplyr 做到这一点?

尝试

library(dplyr)
df %>%
   group_by(b) %>% 
   mutate(d= a-mean(a))