Применение функции dplyr сразу ко всем переменным

У меня есть кадр данных с числовой переменной (числовой) и несколькими факторными переменными (факторы 0 и 1 (ЛОЖЬ, ИСТИНА) или от 0 до 4 (состояния в патологии)). Я хотел бы обобщить медиану и IQR для числового значения для каждой из групп (от 0 до 1, от 0 до 4).

Есть ли способ применить эту функцию к каждому столбцу фактора в наборе данных без необходимости вводить одну переменную за другой?

`library(dplyr)
 group_by(df, othervariable) %>%
  summarise(
  count = n(),
  median = median(numeric, na.rm = TRUE),
  IQR = IQR(numeric, na.rm = TRUE)
)`

Выход:

othevariable count median   IQR
      <dbl> <int>  <dbl> <dbl>
1       0   100   2.46  2.65
2       1   207   3.88  5.86    

person dracoplasma    schedule 30.09.2020    source источник


Ответы (1)


Если ваш набор данных содержит только интересующие группирующие переменные и numeric, вы можете использовать функцию map purrr, чтобы применить оператор summarise к каждой группе.

library(dplyr)

purrr::map(names(df %>% select(-numeric)), function(i) {
  df %>% 
    group_by(!!sym(i)) %>% 
    summarize(
      count = n(),
      median = median(numeric, na.rm = TRUE),
      IQR = IQR(numeric, na.rm = TRUE)
    )
})

На выходе должен быть список фреймов данных, каждый элемент которого соответствует переменной группировки вместе с ее итоговым результатом.

person Ric S    schedule 30.09.2020
comment
Спасибо за информацию о across. Но этот вывод кода принимает каждое значение в числовых строках как группу. Я хочу рассчитать медиану числового значения для группы 0 и группы 1 в переменной 1, группы 0 и группы 1 в переменной 2 и т. д. - person dracoplasma; 30.09.2020
comment
Извините, но я не думаю, что понимаю, чего вы хотите достичь. Не могли бы вы вставить вывод функции dput(df) в свой вопрос, чтобы у меня был образец вашего набора данных? - person Ric S; 30.09.2020
comment
Мне жаль, что я не мог точно объяснить себя. Это такой большой набор данных и содержит личные данные, извините. У меня есть непрерывная числовая вариабельная экспрессия гена и 77 столбцов категориальных переменных с 2 факторами (0 и 1, как будто эта клиническая особенность отсутствует, а она есть) примерно у 300 пациентов (строки). Я хочу иметь медиану и IQR экспрессии гена в каждой из групп (0 и 1) для каждого столбца. Я могу сделать это с помощью spss, но я бы предпочел более эффективный способ экспортировать эти данные напрямую в pdf или xls, а не работать с выходным форматом SPSS. - person dracoplasma; 30.09.2020
comment
@dracoplasma Благодаря этому объяснению, я думаю, вы прояснили ситуацию, спасибо. Я отредактировал свой ответ, пожалуйста, проверьте, хотите ли вы этого. - person Ric S; 01.10.2020
comment
Работал отлично! Спасибо! Просто нужно связать его в аккуратный pdf с R Markdown, я поищу. - person dracoplasma; 02.10.2020
comment
@dracoplasma Красиво! Если вы нашли мой ответ полезным, пожалуйста, проголосуйте и примите его, как вы должны делать в сообщениях о переполнении стека :) - person Ric S; 02.10.2020