在R语言中按ID分组计算CODCOM众数并新增对应列的实现方法
R实现分组计算众数并新增列的方案
R基础包没有内置众数计算函数,我们先自定义一个轻量的众数函数,再按ID分组计算即可。针对你100万行的数据集,提供两种常用实现方案:
方案1:dplyr实现(适合熟悉tidyverse语法的用户)
# 加载依赖包 library(dplyr) # 自定义众数函数:存在多个众数时默认取频率最高的第一个 get_mode <- function(x) { count_table <- table(x) as.integer(names(count_table)[which.max(count_table)]) } # 按ID分组计算众数并新增NEW_COL列,your_data替换为你的数据框变量名 result <- your_data %>% group_by(ID) %>% mutate(NEW_COL = get_mode(CODCOM)) %>% ungroup()
方案2:data.table实现(推荐大数据量使用,100万行运行效率更高)
# 加载依赖包 library(data.table) # 转换数据为data.table格式,your_data替换为你的数据框变量名 setDT(your_data) # 自定义众数函数 get_mode <- function(x) { count_table <- table(x) as.integer(names(count_table)[which.max(count_table)]) } # 按ID分组新增列,原地修改数据内存占用更低 your_data[, NEW_COL := get_mode(CODCOM), by = ID]
补充说明
- 你给出的预期输出最后一行
ID=323032的NEW_COL值为43属于笔误,按逻辑该分组仅1个CODCOM值21,众数应为21,上述代码会输出正确结果。 - 如果业务场景中存在多个相同频率的众数,可自行调整
get_mode函数的返回规则,比如返回所有众数拼接值等。
内容的提问来源于stack exchange,提问作者Ramon_88
相关产品推荐
相关产品推荐

