You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言按ID分组选取VAR众数对应CATEGORY众数的实现方法

首先先定义通用的众数计算函数,R基础包没有内置众数函数,我们手动实现一个,默认出现频率相同的情况下取最先出现的数值:

get_mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

方案1:dplyr实现(适合习惯tidy语法的场景)

library(dplyr)

result <- DATA %>%
  # 按ID分组
  group_by(ID) %>%
  # 生成当前ID对应的VAR列众数
  mutate(VAR_mode = get_mode(VAR)) %>%
  # 仅保留当前ID下VAR等于众数的行
  filter(VAR == VAR_mode) %>%
  # 汇总得到每个ID的最终结果
  summarise(
    TEXTS = first(VAR_mode),
    category = get_mode(CATEGORY)
  )

方案2:data.table实现(更适合大数据量场景,85万行处理速度更快)

library(data.table)
# 将数据框转为data.table格式
setDT(DATA)

result <- DATA[, 
               # 按ID分组计算VAR列众数
               VAR_mode := get_mode(VAR), 
               by = ID
               ][
                 # 筛选出VAR等于众数的行
                 VAR == VAR_mode, 
                 # 按ID分组计算CATEGORY列众数,汇总结果
                 .(TEXTS = first(VAR_mode), category = get_mode(CATEGORY)), 
                 by = ID
               ]

两种方案跑你提供的示例数据,都能得到你要求的输出结果。如果需要处理多个众数并列的逻辑,调整get_mode函数的返回规则即可。


内容的提问来源于stack exchange,提问作者Homer Jay Simpson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:00:01