Как сохранить реальные значения сгруппированной переменной в пакете dplyr в R - PullRequest
0 голосов
/ 01 мая 2019

Мои данные примерно такие:

 group <- c(21, 21, 21, 9, 9, 9, 25, 25, 25)
 a <- c(8,3,5,6,8,3,3,9,3)
 b <- c(4,9,0,1,3,5,6,1,1)
 c <- c(1,7,2,5,6,8,4,8,6)
 value <- c(23,34,43,52,65,21,12,89,76)
 df <- data.frame(group,a,b,c,value)

Я применил к нему следующую функцию.

 out <- df %>%
   select(group, a, b, value) %>%
   group_by(group = gl(n()/3, 3)) %>%
   summarise(res = mean(value), a=a[1], b=b[1])
 print(out)

Тогда я получаю следующий результат.

 group   res     a     b
  <fct> <dbl> <dbl> <dbl>
1  1      33.3     8     4
2  2      46       6     1
3  3      59       3     6
> 

Мой вопрос заключается в том, как сохранить оригинальные значения идентификатора, как они были в выводе df, как это

 group   res     a     b
  <fct> <dbl> <dbl> <dbl>
1  21      33.3     8     4
2   9      46       6     1
3  25      59       3     6
>

Заранее спасибо!

1 Ответ

2 голосов
/ 01 мая 2019

Проблема в том, что вы перезаписываете переменную group в вызове group_by, следовательно, вы не получаете исходную переменную.Вам нужно использовать другое имя в group_by и затем выполнить вычисления.

Мы можем использовать два варианта -

1) С summarise

library(dplyr)

df %>%
  group_by(group1 = gl(n()/3, 3)) %>%
  summarise(res = mean(value), a=a[1], b=b[1], group = group[1])

#  group1   res     a     b group
#  <fct>  <dbl> <dbl> <dbl> <dbl>
#1 1       33.3     8     4    21
#2 2       46       6     1     9
#3 3       59       3     6    25

2) С mutate

df %>%
  select(group, a, b, value) %>%
  group_by(group1 = gl(n()/3, 3)) %>%
  mutate(res = mean(value), a=a[1], b=b[1]) %>%
  slice(1) 

В обоихВ случае, если вы больше не заинтересованы в сохранении переменной группировки, выполните команду ungroup() %>% select(-group1), чтобы удалить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...