Функция R order() - Получение индексов сортировки
Функция 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))
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)
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