假设我想计算每个组中不同值的比例。例如,使用 mtcars
数据,如何计算 am 的齿轮数量的相对频率(自动/手动)用 dplyr
一次性完成?
library(dplyr)
data(mtcars)
mtcars <- tbl_df(mtcars)
# count frequency
mtcars %>%
group_by(am, gear) %>%
summarise(n = n())
# am gear n
# 0 3 15
# 0 4 4
# 1 4 8
# 1 5 5
我想要实现的目标:
am gear n rel.freq
0 3 15 0.7894737
0 4 4 0.2105263
1 4 8 0.6153846
1 5 5 0.3846154
最佳答案
试试这个:
mtcars %>%
group_by(am, gear) %>%
summarise(n = n()) %>%
mutate(freq = n / sum(n))
# am gear n freq
# 1 0 3 15 0.7894737
# 2 0 4 4 0.2105263
# 3 1 4 8 0.6153846
# 4 1 5 5 0.3846154
来自dplyr vignette :
When you group by multiple variables, each summary peels off one level of the grouping. That makes it easy to progressively roll-up a dataset.
因此,在summarise
之后,group_by
中指定的最后一个分组变量“gear”被剥离。在 mutate
步骤中,数据按剩余的分组变量(此处为“am”)进行分组。您可以使用groups
检查每个步骤中的分组情况。
剥离的结果当然取决于 group_by
调用中分组变量的顺序。您可能希望执行后续的 group_by(am)
操作,以使您的代码更加明确。
有关舍入和美化的信息,请参阅@Tyler Rinker 的精彩回答。
关于dplyr 的相对频率/比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24576515/