Excelの関数PercentileをJavaScriptで

多分、そのうち忘れてしまうと思うから今のうちに。

ExcelにPercentileという集合関数がある。
なにかっていうと、「100分率の順位を閾値に変換する」というもので、例えば「中間テストの結果で上位成績者5%は何点以上か?」ってな感じで割とよく使われるものらしい。

Percentile

ただ、Wikipediaの公式のままだとExcelのPercentileとはちょっと結果が異なるっぽい。
今の上司(自分より賢い人)が解決したのだが、0始まりの順位で考えないとうまくいかないようだ。

で、もってJavaScriptで表現するとこうなる。 [javascript] function percentile(list, r) { list.sort(function(a,b){return (parseInt(a) > parseInt(b)) ? 1 : -1;}); var len = list.length; if (len == 1) { return list[0]; } var n = Math.floor(r * (len - 1)) + 1 var r1 = (n - 1) / (len - 1); var v = (r - r1) * (list[n] - list[n - 1]) * (len - 1) + list[n - 1]; return v; } [/javascript]
なお、
CodeGen_MySQL_UDFでh-indexな集計関数

で試したみたいに、MySQLの集合関数も作ってみようと思ったのだけど、めんどくさくなったのでパス。