使用dplyr统计R数据框列值出现次数并新增对应频率列的方法
你之前收到报错是因为count()是dplyr中用于统计分组行数并返回聚合结果的函数,作用对象是数据框,不能直接对字符类型的Code列单独调用,所以会触发类不匹配的报错。
dplyr 优先解决方案
方案1:直接调用add_count()
这是dplyr针对「保留原数据结构新增分组计数字段」场景封装的专用函数,代码最简洁:
library(dplyr) result <- x %>% add_count(Code, name = "Code_frequency")
如果不指定name参数,默认生成的计数字段名为n。
方案2:分组后结合mutate()和n()
如果你需要复用分组逻辑,可以用标准分组写法实现:
library(dplyr) result <- x %>% group_by(Code) %>% mutate(Code_frequency = n()) %>% ungroup()
操作完成后调用ungroup()取消数据的分组属性,避免后续对该数据框的其他操作受分组规则影响。
其他实现思路
基础R原生实现
无需加载任何第三方包,用ave()函数实现分组计数:
x$Code_frequency <- ave(x$Code, x$Code, FUN = length)
data.table 大表优化实现
如果你的数据量较大,data.table的运算效率会显著高于dplyr:
library(data.table) # 转换为data.table格式 setDT(x) # 按Code分组新增计数列 x[, Code_frequency := .N, by = Code]
内容的提问来源于stack exchange,提问作者Ant
相关产品推荐
相关产品推荐

