А как насчет использования scale
?
mtcars %>%
group_by(cyl) %>%
mutate(cent = scale(mpg, scale = F)) %>%
mutate(mean = mean(mpg)) %>%
select(cyl, cent, mean)
Обязательно укажите scale = F
, иначе он будет стандартизирован как будет. Это дает:
# A tibble: 32 x 3
# Groups: cyl [3]
cyl cent mean
<dbl> <dbl> <dbl>
1 6 1.26 19.7
2 6 1.26 19.7
3 4 -3.86 26.7
4 6 1.66 19.7
5 8 3.6 15.1
6 6 -1.64 19.7
7 8 -0.800 15.1
8 4 -2.26 26.7
9 4 -3.86 26.7
10 6 -0.543 19.7
# ... with 22 more rows