首页 文章

Dplyr:如何group_by(全部)

提问于
浏览
2

正如我在某处看到的那样,当有多个group_by()层时,一个summary()剥离了一层分组 . 在sql中,有“所有人分组” . 我想知道是否有办法取消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):两层分组 . 总结()计算每个(汽缸,齿轮)组中的汽车数量,然后剥离group_by(齿轮)层 . 现在数据是group_by(cyl) . 正如您所看到的,下降顺序仅适用于每个气缸 . (对于cyl == 4,在第1-3行中下降,对于cyl == 6,在第4-6行中下降,......) . 我们怎样才能得到所有8条线的下降? (第7行应该是第一行 . )

另一个如何汇总()分组的例子:

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

1 回答

  • 2

    正如David在评论中提到的那样,您正在寻找 ungroup()

    library(dplyr)
    
    mtcars %>%
      select(cyl, gear) %>%
      group_by(cyl, gear) %>%
      summarise(count = n()) %>%
      ungroup() %>%
      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
    

    注意:在您的示例中,您 select()carb 变量,但由于您在 cyl, gear 组上 summarise() ,因此永远不会使用它 . 我从答案中删除了它 .

相关问题