Передача списка группирующих переменных функции R - PullRequest
0 голосов
/ 26 мая 2020

Я придумал следующую функцию, делая несколько вычислений над набором данных. Я передаю в функцию фрейм данных, группирующую переменную и имя субъекта.

f1 <- function(df, group = "country", subject = "Math") {
   df %>%
    group_by(!! rlang::ensym(group)) %>% 
    summarise(ci = list(bootstrap_ci(sex, !! rlang::ensym(subject), weight))) %>% 
    unnest_wider(ci) %>% 
    ungroup() %>% 
    mutate(grouped_by = fct_reorder(!! rlang::ensym(group), avg),
           subject = subject)
}  

Однако теперь я хочу сгруппировать по нескольким столбцам в некоторых случаях. В этом случае я бы хотел повторно использовать указанную выше функцию. Но я не знаю, как это сделать.

Я попытался передать список группирующих переменных в виде списка c («var1», «var2»), который, похоже, не работал

1 Ответ

0 голосов
/ 26 мая 2020

Не меняя большую часть вашей функции, простым исправлением будет использование group_by_at, которое будет принимать имена строковых столбцов.

library(dplyr)
library(tidyr)
library(forcats)
library(rlang)

f1 <- function(df, group = "country", subject = "Math") {
      df %>%
       group_by_at(group) %>% 
       summarise(ci = list(bootstrap_ci(sex, !!ensym(subject), weight))) %>% 
       unnest_wider(ci) %>% 
       ungroup() %>% 
       mutate(grouped_by = fct_reorder(!!ensym(group), avg),
              subject = subject)
} 

Итак, если f1(df) работает с параметрами по умолчанию, для нескольких групп

f1(df, c('group1', 'group2'))

также должно работать.

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