locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
31 lines (30 loc) • 1.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fivenum = fivenum;
const _stats_ts_1 = require("../_helpers/_stats.js");
function fivenum(x) {
// discuss at: https://locutus.io/r/fivenum/
// parity verified: R 4.4
// original by: Kevin van Zonneveld (https://kvz.io)
// note 1: Returns Tukey's five-number summary as [min, lower hinge, median, upper hinge, max].
// example 1: fivenum([1, 2, 3, 4])
// returns 1: [1, 1.5, 2.5, 3.5, 4]
// example 2: fivenum([1, 2, 3, 4, 5])
// returns 2: [1, 2, 3, 4, 5]
// example 3: fivenum([1, 2, 3, 4, 5, 6])
// returns 3: [1, 2, 3.5, 5, 6]
const values = (0, _stats_ts_1.sortedRNumbers)(x, 'fivenum');
if (values.length === 0) {
return [Number.NaN, Number.NaN, Number.NaN, Number.NaN, Number.NaN];
}
const middle = Math.floor(values.length / 2);
const lowerHalf = values.length % 2 === 0 ? values.slice(0, middle) : values.slice(0, middle + 1);
const upperHalf = values.length % 2 === 0 ? values.slice(middle) : values.slice(middle);
return [
values[0] ?? Number.NaN,
(0, _stats_ts_1.medianOfSorted)(lowerHalf),
(0, _stats_ts_1.medianOfSorted)(values),
(0, _stats_ts_1.medianOfSorted)(upperHalf),
values[values.length - 1] ?? Number.NaN,
];
}