R dplyr group_by函数中的组顺序

时间:2019-03-17 17:31:36

标签: r dplyr

我正在使用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()返回一个由字符和因子变量按字母顺序排序的数据帧?根据{{​​3}}的说法,情况确实如此,但是自从2016年进行讨论以来,我想知道结论是否仍然有效。

编辑:我运行了具有100行的原始数据框,以便创建所有12个组(2 * 2 * 3)。显然数据框已排序(包括数字列)。但是,我对自己的“调查”不满意-是否有一般情况下的证明(我的模拟是其中之一)。您知道任何反例吗?

0 个答案:

没有答案