Group_by с несколькими неопределенными факторными переменными

#r #dplyr #group-by #factors

Вопрос:

Я создаю статистическую таблицу, и код должен быть обобщен, чтобы любой набор данных можно было запустить через него без необходимости изменять код (поэтому никаких ссылок на имена столбцов/строк или номера).

Когда я использую это в наборе данных Iris, он работает идеально.

 df %>%
  group_by(across(where(is.factor))) %>% 
  mutate(across(where(is.factor), as.numeric)) %>% 
  summarise(across(
    .cols = everything(), 
    .fns = list(
      Min = min, 
      Max = max,      
      Mean = mean, 
      Median = median, 
      Mode = mode,
      StdDev = sd,   
      Missing = ~ sum(is.na(.)),
      Q05 = ~quantile(., 0.05), 
      Q10 = ~quantile(., 0.10),  
      Q15 = ~quantile(., 0.15),
      Q20 = ~quantile(., 0.20), 
      Q25 = ~quantile(., 0.25), 
      Q30 = ~quantile(., 0.30),
      Q35 = ~quantile(., 0.35),
      Q40 = ~quantile(., 0.40),
      Q45 = ~quantile(., 0.45),
      Q55 = ~quantile(., 0.55),
      Q60 = ~quantile(., 0.60), 
      Q65 = ~quantile(., 0.65),
      Q70 = ~quantile(., 0.70), 
      Q75 = ~quantile(., 0.75),
      Q80 = ~quantile(., 0.80), 
      Q85 = ~quantile(., 0.85),
      Q90 = ~quantile(., 0.90),
      Q95 = ~quantile(., 0.95), 
      N = ~n()
    ),
    .names = "{col}_{fn}"
  )
  )

#output = 
    summarise()` ungrouping output (override with `.groups` argument)
    # A tibble: 3 x 105
      Species SepalLength_Min SepalLength_Max SepalLength_Mean SepalLength_Med…
      <fct>             <dbl>           <dbl>            <dbl>            <dbl>
    1 Setosa               43              58             50.1               50
    2 Versic…              49              70             59.4               59
    3 Virgin…              49              79             65.9               65
    # … with 100 more variables: SepalLength_Mode <chr>, SepalLength_StdDev <dbl>,
 

Проблема возникает, когда у меня есть набор данных с более чем одной факторной переменной. (В Интернете существует множество решений, но каждое из них требует, чтобы в коде было указано имя каждого столбца.) Например, используя набор данных Hmeq, я получаю следующую ошибку:

 Error: Problem with 'summarise() input '...1'.
Can't convert a logical vector to function
Input '...1' is across(...)'. 
Error: Problem with 'summarise() input'
 

Я попытался выполнить разделение всех столбцов факторов и создать цикл для запуска каждой переменной фактора через приведенный выше код, а затем объединить полученные фреймы данных. Я также экспериментировал с функциями apply (), но безуспешно. При обеих этих попытках, по-видимому, возникает конфликт с использованием глаголов dplyr.

Есть ли способ настроить этот код таким образом, чтобы он мог вместить неопределенное количество факторных переменных? Или есть способ перебрать любые/все факторные переменные в коде и объединить в конце (это не противоречит использованию глаголов dplyr)?

Комментарии:

1. Возможно, вам потребуется просто обновить dplyr. Мой работает с вашим кодом (у меня версия 1.0.7).