dplyr: использовать агрегированные результаты group_by в исходном фрейме данных - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть этот набор данных:

test1 <- data.frame(
  group = rep(c("X", "Y", "Z"), each = 3),
  A = seq(from = 0.15, to = 0.55, by = 0.05),
  B = 5:13)

  group    A  B
1     X 0.15  5
2     X 0.20  6
3     X 0.25  7
4     Y 0.30  8
5     Y 0.35  9
6     Y 0.40 10
7     Z 0.45 11
8     Z 0.50 12
9     Z 0.55 13

Я хочу использовать group_by, чтобы получить среднее значение A по группе:

test2 <- test1 %>% 
  group_by(group) %>% 
  summarise(avg = mean(A))

  group   avg
  <fct> <dbl>
1 X      0.2 
2 Y      0.35
3 Z      0.5 

Теперь мой вопрос: есть ли способ разыграть эти агрегированные результаты обратно в исходный фрейм данных без необходимости слияния? То есть в test1 мне нужен столбец со средними значениями по группе. Вот так:

  group    A  B  avg
1     X 0.15  5 0.20
2     X 0.20  6 0.20
3     X 0.25  7 0.20
4     Y 0.30  8 0.35
5     Y 0.35  9 0.35
6     Y 0.40 10 0.35
7     Z 0.45 11 0.50
8     Z 0.50 12 0.50
9     Z 0.55 13 0.50

Как уже говорилось, в настоящее время я объединяю эти два кадра данных вместе, но это кажется немного неэффективным?

1 Ответ

3 голосов
/ 06 февраля 2020

Используйте mutate вместо summarise:

library("dplyr")

test1 <- data.frame(
    group = c(rep("X", 3), rep("Y", 3), rep("Z", 3)),
    A = seq(from = 0.15, to = 0.55, by = 0.05),
    B = 5:13
)

test2 <- test1 %>% 
    group_by(group) %>% 
    mutate(avg = mean(A))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...