#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
решит проблему