如何在 JavaScript(或 PHP)中获取数组的中位数和四分位数/百分位数?

新手上路,请多包涵

这个问题变成了问答,因为我很难找到答案,并且认为它对其他人有用

我有一个 JavaScript 值数组, 需要在 JavaScript 中计算它的 Q2(第 50 个百分位又名 MEDIAN )、Q1( 第 25 个百分位)和 Q3( 第 75 个百分位)值。

在此处输入图像描述

原文由 philippe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 588
1 个回答

我更新了第一个答案的 JavaScript 翻译,以使用箭头函数和更简洁的符号。功能基本保持不变,除了 std ,它现在计算样本标准差(除以 arr.length - 1 而不仅仅是 arr.length

 // sort array ascending
const asc = arr => arr.sort((a, b) => a - b);

const sum = arr => arr.reduce((a, b) => a + b, 0);

const mean = arr => sum(arr) / arr.length;

// sample standard deviation
const std = (arr) => {
    const mu = mean(arr);
    const diffArr = arr.map(a => (a - mu) ** 2);
    return Math.sqrt(sum(diffArr) / (arr.length - 1));
};

const quantile = (arr, q) => {
    const sorted = asc(arr);
    const pos = (sorted.length - 1) * q;
    const base = Math.floor(pos);
    const rest = pos - base;
    if (sorted[base + 1] !== undefined) {
        return sorted[base] + rest * (sorted[base + 1] - sorted[base]);
    } else {
        return sorted[base];
    }
};

const q25 = arr => quantile(arr, .25);

const q50 = arr => quantile(arr, .50);

const q75 = arr => quantile(arr, .75);

const median = arr => q50(arr);

原文由 buboh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题