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


Люди часто путают три функции в R: sort , order и rank .

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

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

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

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

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

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

#sort vector
sort(x)

[1] 0 10 15 20

#order vector
order(x)

[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() в обратном порядке:

#create vector
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()

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

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

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

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

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

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

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

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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.