#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).