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
相关产品推荐
相关产品推荐

