Сгруппировать и найти средства всех чисел c переменных - PullRequest
2 голосов
/ 19 июня 2020

У меня есть набор данных с примерно сотней переменных, поэтому самый простой способ получить средние по группам выглядит следующим образом:

iris %>%
group_by(species) %>%
summarise_if(is.numeric, mean, na.rm=T)

Однако я также хочу знать N в каждой средний счет. R не принимает n () внутри summarise_if.

Я мог бы вручную ввести каждую переменную вот так, но у меня есть сотни переменных, так что это не сработает.

iris %>% group_by(Species) %>% 
summarise(mean_sl = mean(Sepal.Length), mean_sw = mean(Sepal.Width), 
mean_pl = mean(Petal.Length), mean_pw = mean(Petal.Width), n())

Есть идеи, как мне получить среднее значение, а также N для каждой числовой c переменной в моем наборе данных?

1 Ответ

3 голосов
/ 19 июня 2020

С dplyr 1.0.0 мы можем использовать across с summarise, где можно применять несколько функций, как в обычном summarise, а также группы или блоки столбцов в across

library(dplyr)
iris %>% 
   group_by(Species) %>%
   summarise(across(where(is.numeric), mean, na.rm = TRUE), n = n())

Основываясь на комментариях OP, если нам нужно найти количество пропущенных значений для каждого столбца вместе с mean каждого столбца, мы можем иметь разные наборы across (если разные наборы столбцов используются)

iris %>%
   summarise(across(where(is.numeric), mean, na.rm = TRUE),
             across(where(is.numeric), ~ sum(is.na(.)), .names = '{col}_n'))

или иметь один across с разными функциями

iris %>%
    summarise(across(where(is.numeric), 
          list(mean = ~ mean(., na.rm = TRUE), n = ~ sum(is.na(.)))))
...