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
正如我在某处看到的那样,当有多层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