Полное руководство: как использовать sort(), order() и rank() в r


Три функции R, которые люди часто путают, — это сортировка , упорядочивание и ранжирование .

Вот разница между этими функциями:

  • sort() отсортирует вектор в порядке возрастания.
  • order() вернет индекс каждого элемента вектора в отсортированном порядке.
  • Rank() присвоит ранг каждому элементу вектора (наименьшее значение = 1).

В следующем примере показано, как использовать каждую из этих функций на практике.

Пример: используйте sort(), order() и Rank() с векторами.

Следующий код показывает, как использовать функции sort() , order() и Rank() с четырехзначным вектором:

 #createvector
x <- c(0, 20, 10, 15)

#sort vector
sort(s)

[1] 0 10 15 20

#order vector
order(s)

[1] 1 3 4 2

#rank vector
rank(x)

[1] 1 4 2 3

Вот что делает каждая функция:

1. Функция sort() просто сортирует значения векторов в порядке возрастания.

2. Функция order() вернула индекс каждого элемента в отсортированном порядке.

  • Если расположить исходные значения вектора по порядку на основе этих значений индекса, то получится отсортированный вектор.
  • Например, order() говорит нам сначала поместить значение в позицию индекса 1 — в исходном векторе это 0.
  • Затем метод order() говорит нам поместить значение в позицию индекса 3 — это 10 в исходном векторе.
  • Затем метод order() сообщает нам, что нужно поместить значение в позицию индекса 4 — это 15 в исходном векторе.
  • Затем метод order() сообщает нам, что нужно поместить значение в позицию индекса 2 — это 20 в исходном векторе.
  • Конечным результатом является отсортированный вектор — 0, 10, 15, 20.

3. Функция Rank() присвоила ранг каждому элементу вектора, используя 1 для наименьшего значения.

  • Например, Rank() сообщает нам, что первое значение исходного вектора является наименьшим (ранг = 1), а второе значение исходного вектора — самым большим (ранг = 4).

Обратите внимание, что мы можем использовать следующий синтаксис для использования sort() , order() и Rank() в обратном порядке:

 #createvector
x <- c(0, 20, 10, 15)

#sort vector in decreasing order
sort(x, decreasing= TRUE )

[1] 20 15 10 0

#order vector in decreasing order
order(x, decreasing= TRUE )

[1] 2 4 3 1

#rank vector in reverse order (largest value = 1)
rank(-x)

[1] 4 1 3 2

Обратите внимание, что эти результаты прямо противоположны тем, которые были получены в предыдущих примерах.

Примечание. Как обрабатывать связи с помощью функции Rank().

Мы можем использовать аргумент Tie.method , чтобы указать, как нам следует обрабатывать связи при использовании функции Rank() :

 rank(x, ties. method = ' average ')

Вы можете использовать один из следующих параметров, чтобы указать, как обрабатывать ссылки:

  • среднее : (по умолчанию) каждому связанному элементу присваивается средний рейтинг (элементы, занимающие 3-е и 4-е места, получат ранг 3,5).
  • first : присваивает первому связанному элементу самый низкий ранг (элементы, занимающие 3-ю и 4-ю позиции, получат ранги 3 и 4 соответственно)
  • min : присваивает каждому связанному элементу самый низкий ранг (элементы, занимающие 3-е и 4-е места, получат ранг 3).
  • max : присваивает каждому связанному элементу наивысший ранг (элементы, занимающие 3-е и 4-е места, получат ранг 4)
  • Случайный : присваивает каждому связанному элементу случайный ранг (любой элемент, занимающий 3-е и 4-е места, может получить любой ранг)

В зависимости от вашего сценария использование одного из этих методов может иметь больше смысла, чем другие.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в R:

Как сортировать по нескольким столбцам в R
Как отсортировать кадр данных по дате в R
Как рассчитать процентильный ранг в R

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *