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

如何实现Q KDB中返回重复排名的rank函数?

Q/KDB 实现重复值共享排名的自定义rank函数

标准rank函数的行为

Q/KDB中的标准rank函数会为重复值分配递增的不同排名,示例如下:

rank 2 7 4 3 19 16 15 20 25 16 19

返回结果:

0 3 2 1  7 5 4 9 10 6 8

可以看到,重复出现的16分别被分配了排名5和6,19则是7和8。

需求说明

需要实现一个自定义rank函数,要求相等的值对应相同的排名编号,针对上述输入,期望返回结果为:

0 3 2 1 6 5 4 7 8 5 6

这里16的两次出现都对应排名5,19的两次都对应排名6,符合重复值共享排名的要求。

实现方案

可以利用Q的内置函数组合实现该逻辑,代码如下:

myRank:{[x] (rank key group x) flip group x}

逻辑拆解

  1. group x:对输入序列分组,生成字典,键是序列中的唯一值,值是该值在原序列中的位置索引列表
  2. rank key group x:对分组的唯一值执行标准rank,得到每个唯一值对应的排名
  3. flip group x:将分组的位置索引列表展开为原序列长度的索引序列
  4. 通过索引映射,将原序列的每个位置替换为对应值的排名

测试验证

执行自定义函数:

myRank 2 7 4 3 19 16 15 20 25 16 19

返回结果与期望一致:

0 3 2 1 6 5 4 7 8 5 6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:47:11