Сгруппированные средства в dplyr - PullRequest
0 голосов
/ 25 мая 2018

Я нашел следующий код из опубликованной статьи.В этом конкретном случае я бы сказал, что стратегия работает хорошо, поскольку она ясна и переменных относительно мало.Тем не менее, код "немного" повторяется, и мне интересно, есть ли менее повторяющийся способ сделать это, который все еще соответствовал бы стилю и образу жизни dplyr.

enter image description here

Контрольный пример:

set.seed(42)
df <- data.frame(GR=sample(1:2, 100, replace=TRUE),
       as.data.frame(replicate(20, rnorm(100))))
names(df)[-1] <- LETTERS[1:20]

Теперь таблица сгруппированных означает использование aggregate:

aggregate(df[,-1], df[1],mean)

... и с dplyr:

df %>% group_by(GR) %>% summarize(mean.A=mean(A),
                                  mean.B=mean(B),
                                  mean.C=mean(C),
                                  mean.D=mean(D),
                                  mean.E=mean(E),
                                  # skipped 14 rows
                                  mean.T=mean(T))

Есть ли DRY способ сделать это в dplyr?Я знаю, что все инструменты программирования в R также доступны в dplyr - поэтому вопрос не в том, КАК это сделать ... скорее, я ищу идиоматический способ сделать это dplyr.Я видел подобные, но гораздо более длинные примеры в реальной жизни.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Как насчет этого:

df %>% 
  group_by(GR) %>% 
  summarise_all(.funs = mean) %>% 
  setNames(paste("mean", colnames(.), sep = "."))
0 голосов
/ 25 мая 2018

Когда есть несколько столбцов для summarise, используйте либо summarise_all (если все другие столбцы необходимо суммировать с помощью функции, кроме переменной группировки)

df %>%
   group_by(GR) %>%
   summarise_all(funs(mean = mean(., na.rm = TRUE)))

Если мынужно сделать это только для выбранных столбцов, затем попробуйте с помощью summarise_at

df %>%
   group_by(GR) %>%
   summarise_at(vars(A, B, C, D, E), funs(mean = mean(., na.rm = TRUE)))

Кроме того, проверьте summarise_if, когда мы хотели применить функцию только к определенным type s столбцов

...