2015-07-22 2 views
1

Учитывая следующий массив:Вычислить Quintiles/децилям из массива чисел

[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.

+2

Пожалуйста, попытаться что-то, и после того, что вы пытались. SO здесь не для того, чтобы делать вашу работу за вас, но чтобы понять, почему что-то не дает ожидаемого результата – depperm

+0

@depperm Я добавил, как далеко я смог получить, что является первым шагом к сортировке и подсчету числа значения. В следующей части я застрял. – jonmrich

+0

_looking для решения в jquery ..._ Что здесь ** jquery ** здесь? jQuery полезен только для работы с ** DOM **. Массивы могут быть легко обработаны чистым Javascript, без jquery. – hindmost

ответ

4

Использование так:

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]); 
+0

Спасибо. Пришлось добавить 0 до .2, чтобы заставить это работать. 'len [per20]' возвращается как неопределенный. 'per20' действительно возвращается со значением. Что означает «len»? – jonmrich

+0

Извините, это опечатка .. это должно быть arr [per20] .. Я отредактировал. – jrath

+0

Спасибо. Это работает, но с одной серьезной проблемой. Когда я сортирую свой массив, он возвращается так: '[1, 1, 1, 1, 1, 1, 10, 10, 10, 10, 10, 104, 108, 11, 11, 11, 11, 11, 111 , 115, 115] 'Это сортировка в алфавитном порядке вместо численного значения – jonmrich

0

Что-то вроде этого:

tricks6.sort(); 
var length = tricks6.length; 

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

' tricks6.sort(); 'не сортирует array 'var scores = [1, 2, 10, 21]; scores.sort(); // [1, 10, 2, 21] ' –

+0

Хорошая точка! Починил это. – user3413723

0

Вы с легкостью можете сортировать свой массив:

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. И двадцатый Перчиле parseInt(myArray.length * 0.2) => 2

0

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 
Смежные вопросы