我正在使用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)。显然数据框已排序(包括数字列)。但是,我对自己的“调查”不满意-是否有一般情况下的证明(我的模拟是其中之一)。您知道任何反例吗?