假设我想计算每组中不同值的比例。例如,使用mtcars数据,我如何一次性计算 am* (自动/手动) 齿轮 数的 相对 频率? ***dplyr
mtcars
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 小插图 :
当您按多个变量分组时,每个摘要都会剥离一个分组级别。这使得逐步汇总数据集变得容易。
因此,在 之后summarise,在 ‘gear’ 中指定的最后一个分组变量group_by被剥离。在该mutate步骤中,数据按剩余的分组变量分组,此处为“am”。您可以使用 . 检查每个步骤中的分组groups。
summarise
group_by
mutate
groups
剥离的结果当然取决于group_by调用中分组变量的顺序。您可能希望执行后续操作group_by(am),以使您的代码更加明确。
group_by(am)
对于四舍五入和美化,请参阅@Tyler Rinker 的好答案。