Порядок групп в функции R dplyr group_by - PullRequest
1 голос
/ 17 марта 2019

Я использую функцию 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). Кажется очевидным, что фрейм данных отсортирован (включая числовые столбцы). Тем не менее, я не удовлетворен моим «расследованием» - есть ли доказательства общего случая (мое моделирование - одно из многих). Вы знаете какие-нибудь контрпримеры?

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