【问题标题】:Calculate quintiles/deciles from an array of numbers从数字数组计算五分位数/十分位数
【发布时间】:2016-12-13 00:34:54
【问题描述】:

给定以下数组:

[13, 468, 3, 6, 220, 762, 97, 16, 522, 69, 119, 2895, 1255, 49, 19, 261, 9, 140, 55, 20, 6, 22, 6, 17, 115]

我需要计算第 20、40、60 和 80 个百分位数的值。步骤是将数组从低到高排序,计算值的总数,确定第 20 个百分位数的值,等等(例如,如果有 10 个数字按从低到高的顺序排列,则第二个值将是第 20 个百分位)。

这存储在一个变量中,我知道我可以像这样对数字进行排序: ticks6.sort();

并通过以下方式获取数组中值的数量:

var newticks=ticks6.length;

我不知道如何做下一部分,虽然我在哪里找出百分位数,但在 jquery 或 javascript 中寻找解决方案。

【问题讨论】:

  • 请尝试一下,然后发布您尝试过的内容。 SO 不是来为你做你的工作,而是帮助找出为什么某些东西没有给出预期的输出
  • @depperm 我添加了我能走多远,这是排序和计算值数量的第一步。下一部分是我卡住的地方。
  • 在 jquery 中寻找解决方案... jquery 在这里做什么? jquery 仅对使用 DOM 有用。数组可以通过纯 Javascript 轻松处理,无需 jquery。

标签: javascript jquery arrays


【解决方案1】:

这样使用:

var arr = [13, 468, 3, 6, 220, 762, 97, 16, 522, 69, 119, 2895, 1255, 49, 19, 261, 9, 140, 55, 20, 6, 22, 6, 17, 115];
arr.sort();
var len =  arr.length;
var per20 =  Math.floor(len*.2) - 1;

console.log(arr[per20]);

//类似

var per40 =  Math.floor(len*.4) - 1;
console.log(arr[per40]);

【讨论】:

  • 谢谢。必须在 .2 之前添加一个 0 才能使其正常工作。 len[per20] 以未定义的形式返回。 per20 确实返回了一个值。 len 应该添加什么?
  • 抱歉打错字了..应该是arr[per20]..我已经编辑过了。
  • 谢谢。这是有效的,但有一个主要问题。当我对数组进行排序时,它会像这样返回:[1, 1, 1, 1, 1, 1, 10, 10, 10, 10, 10, 104, 108, 11, 11, 11, 11, 11, 111, 115, 115] 它是按字母顺序而不是按数字排序
  • 没关系...知道了:arr.sort(function(a, b){return a-b})
【解决方案2】:

Simple Statistics 库有一个 quantile 函数,您可以使用它:

ss.quantile([13, 468, 3, 6, 220, 762, 97, 16, 522, 69, 119, 2895, 1255, 49, 19, 261, 9, 140, 55, 20, 6, 22, 6, 17, 115], 0.2)
=> 13

【讨论】:

    【解决方案3】:

    您可以轻松地对数组进行排序:

    console.log([13, 468, 3, 6, 220, 762, 97, 16, 522, 69, 119, 2895, 1255, 49, 19, 261, 9, 140, 55, 20, 6, 22, 6, 17, 115].sort(function(a,b){return a-b}))

    获取数组的长度:myArray.length。 和第 20 分 parseInt(myArray.length * 0.2) => 2

    【讨论】:

      【解决方案4】:

      类似这样的:

      tricks6.sort();
      var length = tricks6.length;
      
      var twentieth = sorted[math.floor((length-1)*.2)] //do for all
      

      【讨论】:

      • tricks6.sort(); 未对数组进行排序 var scores = [1, 2, 10, 21]; scores.sort(); // [1, 10, 2, 21]
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 2021-10-13
      • 2017-05-15
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多