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

按loc分组提取key_val最小前10条数据问题求助

解决按loc分组取key_val最小前10条的问题

你的代码问题出在使用了tail(.SD, 10):你先按key_val升序排序了整个数据集,此时每组内的key_val是从小到大排列的,tail会取每组的最后10条(也就是key_val最大的10条),和你要取最小前10条的需求完全相反,换成head(.SD, 10)就能解决。

修正后的代码

library(data.table)

# 直接将数据框转为data.table(无需先全局排序)
setDT(df2)

# 按loc分组,每组内按key_val升序排序后取前10条
data_new3 <- df2[, .SD[order(key_val)][1:10], by = loc]

或者更简洁的写法:

data_new3 <- df2[order(key_val), head(.SD, 10), by = loc]

代码说明

  1. setDT(df2):将普通数据框转为data.table,方便后续分组操作
  2. by = loc:按loc字段分组
  3. .SD[order(key_val)]:对每组内的数据按key_val升序排序,确保最小的排在前面
  4. [1:10] / head(.SD,10):取每组排序后的前10条,也就是key_val最小的10条数据

验证示例数据

以你提供的示例表为例:

  • Nigeria组的key_val最小的是1、2,取前10条会返回该组所有行
  • France组的key_val按升序是3、4、5、6,取前10条会返回该组所有行(若实际数据更多,会自动截取前10条最小的)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:33:36