Среднее значение по строкам для выбранных столбцов в R

Давайте проиллюстрируем проблему на знаменитом наборе данных iris. Мне нужно применить выбранную функцию по строкам, но только к выбранным столбцам. Пример выглядит следующим образом:

library(tidyverse)

iris %>%
  mutate_at(.funs = scale, .vars = vars(-c(Species))) %>%
  rowwise() %>% 
  mutate(my_mean=mean(c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)))

Итак, сначала я масштабирую все переменные, кроме Species, а затем вычисляю среднее значение по строкам для всех четырех числовых переменных. Однако в реальном наборе данных у меня более 100 числовых переменных, и мне интересно, как убедить R автоматически включать все переменные, кроме выбранной (например, Species в данном примере). Я просматриваю решения на SO (например, это), но все примеры явно ссылаться на имена столбцов. Любые указатели очень приветствуются.

РЕДАКТИРОВАТЬ: после некоторого манипулирования вот мое решение:

iris %>%
  as_tibble() %>% 
  mutate_at(.funs = scale, .vars = vars(-c(Species))) %>% 
  transmute(Species, row_mean = rowMeans(select(., -Species)))

person Andrej    schedule 03.10.2017    source источник
comment
Если я понимаю ваш вопрос, в базе R вы бы сделали rowMeans(scale(iris[-grep("Species", names(iris))])).   -  person lmo    schedule 03.10.2017
comment
Вы хотите применить rowMeans() ко всем столбцам, кроме одного? например, dplyr::select(-Species) %>% dplyr::mutate(my_mean=rowMeans(.))?   -  person juan    schedule 03.10.2017


Ответы (1)


Я не уверен, что точно понял, в чем проблема, но вот несколько альтернативных решений dplyr, которые дадут вам среднее значение всех столбцов, кроме выбранного:

iris %>%
    select(-Species) %>%
    mutate(Means = rowMeans(.))

iris %>%
    mutate(Means = rowMeans(.[,1:4]))

iris %>%
    mutate(Means = rowMeans(.[,-5]))

Первый — единственный, который исключает выбранный столбец из результатов. Надеюсь, один из них вам поможет.

person csgroen    schedule 03.10.2017
comment
Как бы вы добились того же, используя чистый dplyr? Я ищу решение без [] для получения столбцов и с явным использованием rowwise. Спасибо - person beginneR; 12.12.2017
comment
Привет @beginneR. Вы можете попробовать первый пример, чтобы удалить столбцы перед вычислением среднего значения, тогда вам не нужно указывать. Вы можете использовать rowwise следующим образом: iris %>% select(-Species) %>% rowwise() %>% mutate(Means = mean(c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width))), но тогда вы должны указать, что столбцы означают, как мне кажется. - person csgroen; 14.12.2017