Я использую функцию dplyr::group_by()
для суммирования некоторых данных. Давайте предположим, что следующий фрейм данных:
set.seed(1)
df <- data.frame(ans = sample(c("Yes", "No"), size = 10, replace = TRUE),
sex = factor(sample(c("Male", "Female"), size = 10, replace = TRUE)),
age = sample(c(10, 20, 30), size = 10, replace = TRUE),
res = rnorm(10, mean = 1, sd = 10))
Вывод после сводки следующий:
df %>% dplyr::group_by(ans, sex, age) %>% summarise(mean_ans = mean(res, na.rm = TRUE))
# A tibble: 9 x 4
# Groups: ans, sex [?]
ans sex age mean_ans
<fct> <fct> <dbl> <dbl>
1 No Female 10 8.82
2 No Female 20 6.09
3 No Male 10 9.21
4 No Male 20 10.2
5 No Male 30 -18.9
6 Yes Female 10 6.94
7 Yes Female 20 7.20
8 Yes Male 10 0.838
9 Yes Male 30 0.551
Кажется, что group_by()
перечисляет группы в алфавитном порядке (конфликты разрешаются следующей переменной группировки). Как насчет переменной age
- почему она не в каком-то порядке (например, 10, 20, 30)?
Если я использую age
в качестве первой переменной группировки, я получаю кадр данных, который отсортирован по всем трем переменным группировки:
dplyr::group_by(age, sex, ans) %>% summarise(mean_ans = mean(res, na.rm = TRUE))
# A tibble: 9 x 4
# Groups: age, sex [?]
age sex ans mean_ans
<dbl> <fct> <fct> <dbl>
1 10 Female No 8.82
2 10 Female Yes 6.94
3 10 Male No 9.21
4 10 Male Yes 0.838
5 20 Female No 6.09
6 20 Female Yes 7.20
7 20 Male No 10.2
8 30 Male No -18.9
9 30 Male Yes 0.551
Всегда ли group_by()
возвращает фрейм данных, упорядоченный в алфавитном порядке по символьным и факторным переменным? Согласно это обсуждение это так, но поскольку обсуждение состоялось в 2016 году, я хотел бы знать, остаются ли выводы по-прежнему в силе.
EDIT : Я запустил исходный фрейм данных со 100 строками, чтобы были созданы все 12 групп (2 * 2 * 3). Кажется очевидным, что фрейм данных отсортирован (включая числовые столбцы). Тем не менее, я не удовлетворен моим «расследованием» - есть ли доказательства общего случая (мое моделирование - одно из многих). Вы знаете какие-нибудь контрпримеры?