Полное руководство: как использовать 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