Dplyr:如何 group_by(all)

Dplyr: how to group_by(all)

正如我在某处看到的那样,当有多层group_by() 时,一个summarise() 会剥离一层分组。在 sql 中,有 "group by all"。我想知道是否有一种方法可以取消 dplyr 中的所有分组(这样,例如,我们可以获得所有分组的最大值,而不是每个组的最大值)

示例:

library(dplyr)
library(car)

mtcars %>%
  select(cyl, gear, carb) %>%
  group_by(cyl, gear) %>%
  summarise(count = n()) %>%
  arrange(desc(count))

输出:

Source: local data frame [8 x 3]
Groups: cyl

  cyl gear count
1   4    4     8
2   4    5     2
3   4    3     1
4   6    4     4
5   6    3     2
6   6    5     1
7   8    3    12
8   8    5     2

所以数据是group_by(cyl, gear): 两层分组。 summarise() 计算每个 (cyl, gear) 组中有多少辆汽车,然后剥离 group_by(gear) 层。 现在数据是 group_by(cyl)。 如您所见,下降顺序仅适用于每个圆柱体。 (对于 cyl==4,在第 1-3 行下降,对于 cyl==6,在第 4-6 行下降,...)。 我们如何获得所有 8 条线的下降? (第 7 行应该是第一行。)

summarise() 如何剥离分组的另一个例子:

mtcars %>%
  select(cyl, gear, carb) %>%
  group_by(cyl, gear) %>%
  summarise(count = n())

Output:
Source: local data frame [8 x 3]
Groups: cyl

  cyl gear count
1   4    3     1
2   4    4     8
3   4    5     2
4   6    3     2
5   6    4     4
6   6    5     1
7   8    3    12
8   8    5     2

---
mtcars %>%
  select(cyl, gear, carb) %>%
  group_by(cyl, gear) %>%
  summarise(count = n()) %>%
  summarise(count1 = max(count))


Output:
Source: local data frame [3 x 2]

  cyl count1
1   4      8
2   6      4
3   8     12

---

mtcars %>%
  select(cyl, gear, carb) %>%
  group_by(cyl, gear) %>%
  summarise(count = n()) %>%
  summarise(count1 = max(count)) %>%
  summarise(max(count1))

Output:

Source: local data frame [1 x 1]

  max(count1)
1          12

尝试:

mtcars %>%
  count(cyl, gear, name = "count") %>%
  arrange(desc(count))

您将获得:

#Source: local data frame [8 x 3]
#
#  cyl gear count
#1   8    3    12
#2   4    4     8
#3   6    4     4
#4   4    5     2
#5   6    3     2
#6   8    5     2
#7   4    3     1
#8   6    5     1