别再手动数数了!用R语言dplyr的count函数,5分钟搞定数据频次统计
别再手动数数了用R语言dplyr的count函数5分钟搞定数据频次统计每次面对一堆分类数据你是不是还在用Excel筛选、复制粘贴或者写一堆循环来统计每个类别的数量作为一名从Excel转战R的数据分析师我曾经也在这个坑里挣扎了很久直到发现了dplyr包的count函数——这个不到5行代码就能解决频次统计问题的神器。1. 为什么你需要count函数刚接触R语言时我处理客户调研数据的第一反应是写for循环统计每个选项的出现次数。结果花了半小时调试代码最后发现结果还少算了几个NA值。后来团队里一位资深工程师看我对着屏幕抓狂默默扔给我一行代码survey_data %% count(question_option)那一刻我才明白数据分析工具的真正价值在于用最简单的方法解决最常见的问题。count函数就是这样一个存在——它专门为频次统计设计能自动处理分组、计数、排序等繁琐操作让你从重复劳动中解放出来。与传统方法相比count有三大优势代码简洁1行代码 vs 10行循环或多次筛选操作结果直观自动生成包含类别和计数的整洁数据框功能全面支持多列组合统计、加权计算、结果排序等进阶需求2. 从零开始掌握count基础用法让我们用经典的mtcars数据集演示最基本的计数场景。假设我们需要统计不同气缸数(cyl)的汽车数量library(dplyr) data(mtcars) # 基础语法 mtcars %% count(cyl) # 输出结果 # cyl n # 1 4 11 # 2 6 7 # 3 8 14这个简单例子已经展示了count的核心价值输入列名输出计数。但实际工作中我们往往需要更多控制比如2.1 控制排序与显示添加sortTRUE参数可以让结果按计数降序排列mtcars %% count(cyl, sort TRUE) # cyl n # 1 8 14 # 2 4 11 # 3 6 72.2 多列组合统计当需要统计两个变量的组合频次时比如气缸数和变速箱类型只需在count中添加多个参数mtcars %% count(cyl, gear) # cyl gear n # 1 4 3 1 # 2 4 4 8 # 3 4 5 2 # 4 6 3 2 # 5 6 4 4 # 6 6 5 1 # 7 8 3 12 # 8 8 5 2提示当组合类别很多时建议同时使用sortTRUE快速定位高频组合3. 进阶技巧让count应对复杂场景掌握了基础用法后下面这些技巧能让count函数在真实业务场景中发挥更大作用3.1 动态创建统计列有时我们需要先计算新指标再统计其分布。例如统计每马力对应的油耗(mpg/hp)的分布情况mtcars %% mutate(mpg_per_hp round(mpg/hp, 2)) %% count(mpg_per_hp, sort TRUE) # mpg_per_hp n # 1 0.19 3 # 2 0.05 3 # 3 0.11 3 # 4 0.06 3 # 5 0.10 33.2 加权计数当简单计数不能满足需求时可以用wt参数指定权重列。例如计算不同气缸数的总油耗而非车辆数mtcars %% count(cyl, wt mpg) # cyl n # 1 4 293.3 # 2 6 138.2 # 3 8 211.43.3 保留原始数据add_count()函数可以在保留所有原始列的同时添加计数列非常适合标记数据中的高频组mtcars %% add_count(cyl) %% select(cyl, mpg, n) %% head(5) # cyl mpg n # 1 6 21.0 7 # 2 6 21.0 7 # 3 4 22.8 11 # 4 6 21.4 7 # 5 8 18.7 144. 与其他方法的对比与选择虽然count非常方便但R语言中还有其他频次统计方法了解它们的区别很重要方法优点缺点适用场景count()语法简洁结果整洁依赖dplyr包快速探索性分析table()基础R函数无需加载包输出格式不易后续处理简单计数group_bysummarise灵活性最高代码量较大需要复杂聚合时实际项目中我的选择策略是日常探索数据优先使用count需要极简依赖时用table涉及多重计算时用group_by组合5. 真实业务案例应用最后看一个客户行为分析的实战案例。假设我们有用户购买记录数据purchases - tibble( user_id c(1,1,2,3,2,3,3,1,2), product c(A,B,A,C,B,A,B,C,A), amount c(100,200,50,300,150,120,80,250,90) )5.1 统计最受欢迎商品purchases %% count(product, sort TRUE) # product n # 1 A 4 # 2 B 3 # 3 C 25.2 计算各用户购买总金额purchases %% count(user_id, wt amount) # user_id n # 1 1 550 # 2 2 290 # 3 3 5005.3 识别高频购买组合purchases %% count(user_id, product) # user_id product n # 1 1 A 1 # 2 1 B 1 # 3 1 C 1 # 4 2 A 2 # 5 2 B 1 # 6 3 A 1 # 7 3 B 1 # 8 3 C 1这些分析原本需要编写复杂SQL或多次数据透视现在用count函数几行代码就能搞定。特别是在处理数十万行数据时count的性能优势更加明显。