Функция R order() - Получение индексов сортировки

R 语言实例Примеры на языке R

Функция order() в R возвращает индексы позиций каждого элемента в исходном векторе после сортировки.

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

Синтаксис функции order() следующий:

order(x, decreasing = FALSE, na.last = TRUE)

Описание параметра:

  • xВходной вектор (можно передать несколько векторов для сортировки по нескольким условиям).

  • decreasingСортировать ли по убыванию, по умолчанию — FALSE.

  • na.lastРазмещение значений NA.

Пример

x <- c(50, 20, 30, 10, 40)
names(x) <- c("Чжан Сань", "Li Si", "Wang Wu", "Zhao Liu", "Qian Qi")

# order возвращает индексы сортировки
idx <- order(x)
print("Отсортированные индексы:")
print(idx)

# Использование индексов для получения отсортированных значений и соответствующих имён
print("По возрастанию баллов:")
print(x[idx])

# sort напрямую возвращает отсортированные значения (сравнение)
print("результат прямого sort:")
print(sort(x))

Выполнение приведённого выше кода даёт следующий результат:

[1] "排序后的索引:"
[1] 4 2 3 5 1
[1] "按成绩升序:"
赵六 李四 王五 钱七 张三
  10   20   30   40   50
[1] "sort 直接结果:"
赵六 李四 王五 钱七 张三
  10   20   30   40   50

order() очень удобен для сортировки датафреймов:

Пример

# Создать датафрейм
df <- data.frame(
Name= c("Zhang San", "Li Si", "Wang Wu", "Zhao Liu", "Qian Qi"),
Age= c(25, 30, 22, 28, 26),
Score= c(88, 92, 76, 85, 90)
)

# Сортировка по score по убыванию
df_sorted <- df[order(df$Score, decreasing= TRUE), ]
print("Отсортировано по score по убыванию:")
print(df_sorted)

# Сортировка по нескольким условиям: сначала по age, затем по score
df_sorted2 <- df[order(df$Age,df$score), ]
print("Сначала по age, затем по score:")
print(df_sorted2)

Выполнение приведённого выше кода даёт следующий результат:

[1] "按成绩降序排列:"
  姓名 年龄 成绩
2 李四   30   92
5 钱七   26   90
1 张三   25   88
4 赵六   28   85
3 王五   22   76
[1] "先按年龄再按成绩:"
  姓名 年龄 成绩
3 王五   22   76
1 张三   25   88
5 钱七   26   90
4 赵六   28   85
2 李四   30   92

R 语言实例Примеры на языке R

Другие расширения