为了完整回答这个常见问题,自
dplyr
1.0.0 版本以来,参数
.groups 控制
group_by
后
summarise
函数的分组结构。使用
.groups = "drop_last"
,
summarise
将删除最后一级分组。在 1.0.0 版本之前,这是唯一的结果。
summarise 帮助。
library(dplyr)
library(scales)
original <- mtcars %>%
group_by (am, gear) %>%
summarise (n=n()) %>%
mutate(rel.freq = scales::percent(n/sum(n), accuracy = 0.1))
original
new_drop_last <- mtcars %>%
group_by (am, gear) %>%
summarise (n=n(), .groups = "drop_last") %>%
mutate(rel.freq = scales::percent(n/sum(n), accuracy = 0.1))
dplyr::all_equal(original, new_drop_last)
使用
.groups = "drop"
,所有分组级别都将被删除。结果将转换为独立的tibble,并且不会保留以前的
group_by
的任何痕迹。
new_drop <- mtcars %>%
group_by (am, gear) %>%
summarise (n=n(), .groups = "drop") %>%
mutate(rel.freq = scales::percent(n/sum(n), accuracy = 0.1))
new_drop
如果
.groups = "keep"
,则与.data(在此情况下为mtcars)具有相同的分组结构。
summarise
不会剥离任何用于
group_by
的变量。
最后,如果
.groups = "rowwise"
,每行都是自己的一组。在这种情况下,它等同于"keep"。
new_keep <- mtcars %>%
group_by (am, gear) %>%
summarise (n=n(), .groups = "keep") %>%
mutate(rel.freq = scales::percent(n/sum(n), accuracy = 0.1))
new_keep
new_rowwise <- mtcars %>%
group_by (am, gear) %>%
summarise (n=n(), .groups = "rowwise") %>%
mutate(rel.freq = scales::percent(n/sum(n), accuracy = 0.1))
dplyr::all_equal(new_keep, new_rowwise)
另一个可能感兴趣的点是,在应用group_by
和summarise
之后,有时需要添加摘要行。
subtotal_am <- mtcars %>%
group_by (am) %>%
summarise (n=n()) %>%
mutate(gear = NA, rel.freq = 1)
mtcars %>% group_by (am, gear) %>%
summarise (n=n()) %>%
mutate(rel.freq = n/sum(n)) %>%
bind_rows(subtotal_am) %>%
arrange(am, gear) %>%
mutate(rel.freq = scales::percent(rel.freq, accuracy = 0.1))
本文创建于2020年11月9日,使用reprex包 (v0.3.0)
希望您会发现这个答案有用。
prop.table()
/sweep()
。另外,在其他问题中,一些人要求包括变量或变量交互的零计数选项。 - smci