r - 为什么汇总和汇总给出的答案顺序不同?

标签 r dplyr aggregate

如果我使用聚合函数或在 dplyr 包中使用汇总来计算某些东西,为什么它们给出的答案顺序不同?

例子:

a <- aggregate(hp~mpg+cyl+gear, mtcars, FUN = sum)

给我
 mpg cyl gear  hp
1  21.5   4    3  97
2  18.1   6    3 105
3  21.4   6    3 110
4  10.4   8    3 420
5  13.3   8    3 245


b <- mtcars %>%
     group_by(mpg, cyl, gear) %>%
     summarise(hp = sum(hp))

给我
    mpg   cyl  gear    hp
   <dbl> <dbl> <dbl> <dbl>
 1  10.4     8     3   420
 2  13.3     8     3   245
 3  14.3     8     3   245
 4  14.7     8     3   230
 5  15       8     5   335

为什么顺序不一样?

最佳答案

正如@zx8754 所提到的,tidyverse 操作将重新排列行。不能保证您将获得特定的行顺序。
https://github.com/tidyverse/dplyr/issues/2192#issuecomment-281655703

仔细观察,我看到聚合按齿轮、cyl 和 mpg 排序。
因此,以下 tidyverse 代码将提供与 aggregate(hp~mpg+cyl+gear, mtcars, FUN = sum) 相同的行顺序:

library(tidyverse)
mtcars %>% group_by(gear, cyl, mpg) %>% summarise(hp = sum(hp)) %>% head()
#> # A tibble: 6 x 4
#> # Groups:   gear, cyl [3]
#>    gear   cyl   mpg    hp
#>   <dbl> <dbl> <dbl> <dbl>
#> 1     3     4  21.5    97
#> 2     3     6  18.1   105
#> 3     3     6  21.4   110
#> 4     3     8  10.4   420
#> 5     3     8  13.3   245
#> 6     3     8  14.3   245

创建于 2019-02-27 由 reprex package (v0.2.1)

并获得与 mtcars %>% group_by(mpg, cyl, gear) %>% summarise(hp = sum(hp)) 相同的行顺序:

library(tidyverse)
aggregate(hp~gear+cyl+mpg, mtcars, FUN = sum) %>% head()
#>   gear cyl  mpg  hp
#> 1    3   8 10.4 420
#> 2    3   8 13.3 245
#> 3    3   8 14.3 245
#> 4    3   8 14.7 230
#> 5    5   8 15.0 335
#> 6    3   8 15.2 330

创建于 2019-02-27 由 reprex package (v0.2.1)

关于r - 为什么汇总和汇总给出的答案顺序不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52602937/

相关文章:

r - 数据框上的 If/else 函数以创建条件矩阵

r - R 中具有不等行的绑定(bind)矩阵

r - 具有选定列的从长到宽的数据框

python - Pandas Groupby : Aggregate and Conditional

elasticsearch - 如何通过多个字段进行 Elasticsearch 聚合

r - 在 ggplot 中按形状添加图例(在 : to calculate numeric deriv) 之后添加第二个问题

R函数用阴影绘制不等式

r - 计算数据集中因子水平的相对频率

替换按年份命名的有序列中的值(来自指示范围的列)

r - 使用多列枢轴