小编典典

dplyr 的相对频率/比例

all

假设我想计算每组中不同值的比例。例如,使用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

阅读 118

收藏
2022-06-25

共1个答案

小编典典

尝试这个:

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

剥离的结果当然取决于group_by调用中分组变量的顺序。您可能希望执行后续操作group_by(am),以使您的代码更加明确。

对于四舍五入和美化,请参阅@Tyler Rinker 的好答案。

2022-06-25