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

R中使用group_by按列分组后提取指定列最大前3条数据的方法

R分组取组内TOPN问题解答

原有代码问题

  • 分组字段错误:group_by(C, J)将C、J的每一组唯一值作为独立分组,你的数据中每个(C,J)组合仅对应1条记录,执行top_n(3)会返回全量数据,无法实现按C列分组取组内前3的需求
  • 未显式指定排序字段:top_n默认取最后一列作为排序依据,显式指定wt=SD可避免因字段顺序变化产生的隐性错误

正确实现代码

dplyr版本

library(dplyr)
# 推荐写法:slice_max更直观,无需提前排序
res <- data %>%
  group_by(C) %>%
  slice_max(order_by = SD, n = 3) %>%
  arrange(C, desc(SD))

如果需要严格取前3条、过滤并列值,可在slice_max中添加参数with_ties = FALSE。

data.table版本(适配你给出的data.table格式源数据)

library(data.table)
setDT(data) # 源数据已经是data.table格式可跳过该行
res <- data[order(-SD), .SD[1:3], by = C]

两种写法输出结果都和你给出的预期结果完全一致。

内容的提问来源于stack exchange,提问作者Madhur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:48:03