Сортировка векторов с помощью sort()
Сортируйте числовые и строковые векторы по возрастанию или убыванию.
«Сортировка векторов с помощью sort()» — бесплатный урок R Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.
Что делает sort()
Функция sort() по умолчанию располагает элементы вектора по возрастанию. Она работает с numeric-, character- и логическими векторами и возвращает новый отсортированный вектор, не изменяя исходный.
scores <- c(42, 7, 95, 13, 67, 31)
sorted_scores <- sort(scores)
print(sorted_scores)Сортировка по убыванию
Передайте в sort() аргумент decreasing = TRUE, чтобы изменить направление сортировки. Это удобно для ранжирования результатов от наибольшего к наименьшему, например баллов в таблице лидеров или показателей продаж.
prices <- c(19.99, 5.49, 89.00, 34.50, 12.75)
sort(prices, decreasing = TRUE)Сортировка character-векторов
Character-векторы сортируются лексикографически (в алфавитном порядке). R использует системную локаль, поэтому в зависимости от её настроек прописные буквы могут располагаться перед строчными.
fruits <- c('banana', 'Apple', 'cherry', 'apricot', 'Blueberry')
sort(fruits)Поведение сортировки с учётом регистра
В большинстве локалей прописные буквы располагаются перед строчными. Для сортировки без учёта регистра сначала приведите все значения к одному регистру с помощью tolower() или toupper(), а затем выполните сортировку.
words <- c('Zebra', 'apple', 'Mango', 'banana')
# Case-sensitive (uppercase first)
sort(words)
# Case-insensitive approach
words[order(tolower(words))]Обработка значений NA с помощью na.last
По умолчанию sort() удаляет значения NA. Используйте na.last = TRUE, чтобы поместить NA в конец, или na.last = FALSE, чтобы поместить их в начало. Это определяет положение пропущенных значений в результате.
data <- c(5, NA, 2, NA, 8, 1)
# Default: NAs removed
sort(data)
# NAs at end
sort(data, na.last = TRUE)
# NAs at beginning
sort(data, na.last = FALSE)Сортировка логических векторов
При сортировке по возрастанию логические векторы располагают FALSE (0) перед TRUE (1). Это может быть полезно, если нужно сгруппировать значения TRUE/FALSE.
flags <- c(TRUE, FALSE, TRUE, FALSE, FALSE, TRUE)
sort(flags)
sort(flags, decreasing = TRUE)sort() сохраняет тип вектора
sort() всегда возвращает вектор того же типа, что и входной. Сортировка integer возвращает integer, double — double, а character — character. Атрибут класса сохраняется.
int_vec <- c(5L, 2L, 8L, 1L, 4L)
result <- sort(int_vec)
print(result)
print(class(result))
print(typeof(result))sort.int() для сортировки integer
sort.int() — низкоуровневая функция, предназначенная именно для сортировки integer- или double-векторов. Она принимает те же аргументы, что и sort(), но для больших numeric-векторов работает немного быстрее, поскольку пропускает часть накладных расходов на выбор метода.
big_vec <- c(100L, 3L, 77L, 22L, 55L, 9L)
# sort.int works like sort for numeric/integer vectors
result <- sort.int(big_vec, decreasing = FALSE)
print(result)Исходный вектор не изменяется
Важное свойство sort(): функция не изменяет исходный вектор. Она возвращает новый отсортированный вектор. Если Вы хотите сохранить отсортированный порядок, результат нужно присвоить переменной.
temps <- c(22.5, 18.0, 30.1, 15.3, 27.8)
sorted_temps <- sort(temps)
cat('Original:', temps, '\n')
cat('Sorted: ', sorted_temps, '\n')Совместное использование сортировки и индексации
Иногда нужны и отсортированные значения, и их исходные позиции. Объедините sort() с which() или используйте order() (это рассматривается в следующем уроке), чтобы получить исходные индексы вместе с отсортированными значениями.
exam_scores <- c(78, 92, 65, 88, 71)
sorted <- sort(exam_scores)
cat('Sorted scores:', sorted, '\n')
# Find what rank each original score gets
ranks <- rank(exam_scores)
cat('Rank of each student:', ranks, '\n')Практические шаблоны использования sort()
Распространённый шаблон — отсортировать уникальные значения вектора или получить N наибольших значений с помощью sort() в сочетании с head() или tail().
sales <- c(120, 340, 95, 210, 340, 180, 95, 420)
# Unique values in order
sort(unique(sales))
# Top 3 largest
tail(sort(sales), 3)
# Bottom 3 smallest
head(sort(sales), 3)Быстрая проверка
Какой аргумент определяет, будут ли значения NA находиться в начале, в конце или удаляться при использовании sort()?
Основные выводы о sort()
Основные выводы о sort():
- Используйте
sort(x)для сортировки по возрастанию иsort(x, decreasing=TRUE)для сортировки по убыванию - Character-векторы сортируются в алфавитном порядке; по умолчанию регистр учитывается
- Управляйте положением NA с помощью
na.last = TRUE/FALSE/NA sort()не изменяет исходный вектор — она всегда возвращает новый- Используйте
tail(sort(x), n)илиhead(sort(x), n), чтобы получить N наибольших или наименьших значений sort.int()— более быстрый вариант для numeric-/integer-векторов
x <- c(3, 1, NA, 5, 2, NA, 4)
cat('Ascending (no NAs):', sort(x), '\n')
cat('Descending (NAs last):', sort(x, decreasing = TRUE, na.last = TRUE), '\n')Часто задаваемые вопросы
Урок «Сортировка векторов с помощью sort()» бесплатный?
Да — полный текст урока «Сортировка векторов с помощью sort()» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.
Чему я научусь в уроке «Сортировка векторов с помощью sort()»?
Сортируйте числовые и строковые векторы по возрастанию или убыванию. Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать R Academy?
Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Сортировка векторов с помощью sort()»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке R Academy?
Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Сортировка векторов с помощью sort()
- order() для гибкой сортировки
- Ранжирование значений с помощью rank()
- Сортировка таблиц данных по столбцу