我遇到的要求,从列表中几次收集百分位数:
我写这些方法来解决这一问题:
/for 1:
percentileWithinThreshold:{[threshold;list] (100 * count where list <= threshold) % count list};
/for 2:
thresholdForPercentile:{[percentile;list] (asc list)[-1 + "j"$((percentile % 100) * count list)]};
他们的工作以及两个用例,但我想这是一个太常见的情况,所以大概Q已经提供了一些东西,做同样的盒子。如果有任何想法已经存在别的东西吗?
'100 xrank' 生成百分。
q) 100 xrank 1 2 3 4
q) 0 25 50 75
解决方案为您的第二个要求:
q) f:{ y (100 xrank y:asc y) bin x}
此外,请注意你的第二个函数的结果不会总是像xrank相同。原因是“xrank”使用地板分数索引输出,该输出与计算百分正常情形和你的函数向上舍入值并减去-1这确保输出将总是较小-等于输入百分。例如:
q) thresholdForPercentile[63;til 21] / output 12
q) f[63;til 21] / output 13
对于第一个要求,也没有内置的功能。但是,如果你把你的输入列表进行排序,因为在这种情况下,你可以使用它运行在大名单更快的“本”的功能,你可以改善你的函数。
q) percentileWithinThreshold:{[threshold;list] (100 * 1+list bin threshold) % count list};
请记住,如果一个参数是浮点型,其他的是一个整数“本”会抛出类型错误。因此,请务必正确地将目光投向函数内。