dplyr group_by() не показывает результат в форме группы

#r #dplyr #group-by

#r #dplyr #группировка по

Вопрос:

Я пытаюсь сгруппировать фрейм данных на основе 4 переменных и найти среднее значение пятой переменной. код, который у меня есть, работает; однако он не отображает результат в виде одной строки. так, например:

 shift <- c(0,0,0)
age <- c(14,14,14)
site <-c(4,4,4)
level <-c(5,5,5)
time<- c(50,60,70)

  shift age site level time
1     0  14    4     5   50
2     0  14    4     5   60
3     0  14    4     5   70
  

Я запускаю приведенный ниже код:

 data <- data.frame(shift,age, site, level, time)
data <- data %>% group_by(shift, age, site, level) %>%  mutate(Ave_time=mean(time))
  

идеальный результат, который я хочу, находится в этой форме

   shift   age  site level  time Ave_time
  <dbl> <dbl> <dbl> <dbl> <dbl>    <dbl>
1     0    14     4     5    50       60
  

но то, что я получаю, это:

   shift   age  site level  time Ave_time
  <dbl> <dbl> <dbl> <dbl> <dbl>    <dbl>
1     0    14     4     5    50       60
2     0    14     4     5    60       60
3     0    14     4     5    70       60
  

не могли бы вы посоветовать, как я могу это исправить?
Спасибо

Комментарии:

1. Вы хотели summarise вместо mutate ?

2. mutate просто добавляет новый столбец ваших данных. Может быть, вы ищете summarise ?

3. @AllanCameron, спасибо, это сработало. Вместо этого я должен был использовать summarise_ .

4. @stefan, спасибо, использование summarise устранило проблему.

Ответ №1:

Можете ли вы использовать aggregate вместо этого?

 library(dplyr)

aggregate(.~shift age site level, data, mean) %>%  mutate(Ave_time=mean(time))

# shift age site level time Ave_time
# 1     0  14    4     5   60       60
  

Комментарии:

1. Спасибо, Лиман, этот подход также работает; однако, я думаю, что использование summarise, как рекомендовано Стефаном и Алланом, было бы самым простым способом.

Ответ №2:

Как объяснили @ Allan Cameron и @stefan в комментариях. Использование summarise функции вместо mutate решит проблему