dplyr 的相对频率/比例

标签 r group-by dplyr frequency

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

相关文章:

python - rpy2:将 Python 中的 NA 表示为 R 函数的参数

r - 没有包的命名空间

mysql - 如何统计mysql表中按时间分组的条目数

mysql - 如何使用order by优化mysql group by

r - 如何 group_by 变量并将时间减少到 10 秒的区间,从 13 :24:00 exactly and average for group_by variable 开始

r - 在 R 中以单元格方式添加一堆类似的数据帧的优雅方法?

regex - 确定字符串是否以空格结尾,如果不是,则附加一个空格

r - 如何在ggplot的箱线图中显示中值?

php - Mysql group by where 记录之间的增量 X

r - tidyr 稍后在函数中使用胶水字符串