Повний посібник: як використовувати 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)
- random : призначає кожному зв’язаному елементу випадковий ранг (будь-який елемент, рівний на 3-й і 4-й позиції, може отримати будь-який ранг)
Залежно від вашого сценарію один із цих методів може мати більше сенсу використовувати, ніж інші.
Додаткові ресурси
У наступних посібниках пояснюється, як виконувати інші типові операції в R:
Як сортувати за кількома стовпцями в R
Як відсортувати кадр даних за датою в R
Як розрахувати процентиль рангу в R