Сортировка таблиц данных по столбцу
Сортируйте целые таблицы данных с помощью order() и arrange() из dplyr.
«Сортировка таблиц данных по столбцу» — бесплатный урок R Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.
Сортировка таблицы данных по одному столбцу
Стандартный способ сортировки таблицы данных в базовом R — применить order() к нужному столбцу и использовать полученные индексы для перестановки строк. Запятая после индексов выбирает все столбцы.
df <- data.frame(
name = c('Charlie', 'Alice', 'Bob', 'Diana'),
age = c(35, 28, 42, 31),
salary = c(55000, 48000, 72000, 61000)
)
df[order(df$age), ]Сортировка по убыванию с изменением знака
Для числовых столбцов измените знак столбца внутри order(), чтобы обратить направление сортировки. Знак минус меняет знак всех значений, поэтому максимум становится минимумом с точки зрения порядка сортировки.
df <- data.frame(
name = c('Charlie', 'Alice', 'Bob', 'Diana'),
salary = c(55000, 48000, 72000, 61000)
)
# Highest salary first
df[order(-df$salary), ]Сортировка по нескольким столбцам
Передайте в order() несколько столбцов, чтобы сортировать сначала по основному, а затем по дополнительным критериям. Второй аргумент разрешает совпадения, возникшие по первому критерию. Это соответствует конструкции ORDER BY col1, col2 в SQL.
df <- data.frame(
dept = c('Eng', 'HR', 'Eng', 'HR', 'Eng'),
name = c('Zara', 'Bob', 'Alice', 'Eve', 'Mike'),
salary = c(90000, 55000, 85000, 58000, 78000)
)
# Sort by dept, then by salary descending within dept
df[order(df$dept, -df$salary), ]Сортировка текстовых столбцов
Сортировка по текстовому столбцу работает так же: order() выполняет лексикографическую сортировку. Для обратного алфавитного порядка используйте decreasing = TRUE, а не изменение знака (изменение знака работает только для числовых значений).
df <- data.frame(
city = c('Paris', 'Athens', 'Berlin', 'London'),
pop_mil = c(2.1, 0.6, 3.6, 9.0)
)
# Alphabetical by city
df[order(df$city), ]
# Reverse alphabetical
df[order(df$city, decreasing = TRUE), ]Сброс номеров строк после сортировки
После сортировки имена строк отражают их исходные позиции (например, 3, 1, 4, 2). Чтобы заменить их последовательными целыми числами, начиная с 1, задайте row.names(df) <- NULL или оберните результат в data.frame().
df <- data.frame(
x = c(30, 10, 20),
y = c('c', 'a', 'b')
)
sorted <- df[order(df$x), ]
cat('Before reset:\n'); print(sorted)
row.names(sorted) <- NULL
cat('After reset:\n'); print(sorted)Сортировка при наличии значений NA
Если в столбце для сортировки есть NA, функция order() по умолчанию помещает их в конец. Используйте na.last = FALSE, чтобы переместить строки с NA в начало, или сначала отфильтруйте их.
df <- data.frame(
name = c('Alice', 'Bob', 'Carol', 'Dave'),
score = c(85, NA, 92, NA)
)
cat('NAs last (default):\n')
print(df[order(df$score), ])
cat('NAs first:\n')
print(df[order(df$score, na.last = FALSE), ])dplyr::arrange() как современная альтернатива
Пакет dplyr предоставляет функцию arrange() как более удобную альтернативу. Хотя dplyr не относится к базовому R, знание этого синтаксиса поможет Вам читать современный код на R. Примечание: isRunnable имеет значение true здесь только для демонстрации синтаксиса — для выполнения кода пакет dplyr должен быть установлен.
# dplyr::arrange() syntax (requires dplyr installed)
# library(dplyr)
# df |> arrange(salary) # ascending
# df |> arrange(desc(salary)) # descending
# df |> arrange(dept, desc(salary)) # multi-column
# Equivalent base R:
df <- data.frame(dept=c('A','B','A'), salary=c(50,70,60))
df[order(df$dept, -df$salary), ]Сортировка факторов по порядку уровней
Столбцы-факторы сортируются по порядку уровней, а не в алфавитном порядке. Это позволяет задать собственный порядок сортировки, явно установив уровни фактора перед сортировкой.
df <- data.frame(
priority = factor(c('Low', 'High', 'Medium', 'High', 'Low'),
levels = c('Low', 'Medium', 'High')),
task = c('T1', 'T2', 'T3', 'T4', 'T5')
)
# Sorts by factor level (Low < Medium < High)
df[order(df$priority), ]Сортировка и выбор первых строк
Распространённый приём — отсортировать таблицу данных, а затем взять первые N строк с помощью head() или последние N строк с помощью tail(). Это эквивалент конструкции ORDER BY ... LIMIT N в базовом R.
df <- data.frame(
product = c('A', 'B', 'C', 'D', 'E'),
revenue = c(1200, 4500, 890, 3100, 2750)
)
# Top 3 by revenue
top3 <- head(df[order(-df$revenue), ], 3)
row.names(top3) <- NULL
print(top3)Сортировка на месте и сортировка с присваиванием
Сортировка не изменяет исходную таблицу данных — она возвращает новую. Всегда присваивайте результат переменной: новой или исходной. Перезаписать исходную таблицу вполне допустимо, если исходная, неотсортированная версия Вам больше не нужна.
df <- data.frame(
x = c(3, 1, 4, 1, 5, 9),
y = c('c', 'a', 'd', 'b', 'e', 'i')
)
# Safe: assign to new variable
df_sorted <- df[order(df$x), ]
# Or overwrite original:
df <- df[order(df$x), ]
row.names(df) <- NULL
print(df)Полный процесс сортировки
Ниже приведён полный реалистичный процесс сортировки таблицы данных: сортировка сотрудников по названию отдела по возрастанию, затем по зарплате по убыванию, сброс индексов строк и аккуратное отображение результата.
employees <- data.frame(
name = c('Alice', 'Bob', 'Carol', 'Dave', 'Eve'),
dept = c('IT', 'HR', 'IT', 'HR', 'IT'),
salary = c(85000, 58000, 92000, 63000, 78000)
)
result <- employees[order(employees$dept, -employees$salary), ]
row.names(result) <- NULL
print(result)Быстрая проверка
Как отсортировать таблицу данных df по числовому столбцу df$salary в порядке убывания с использованием базового R?
Сортировка таблиц данных: основные выводы
Основные выводы о сортировке таблиц данных:
- Идиоматичный способ в базовом R:
df[order(df$col), ] - Числовые значения по убыванию: изменяйте знак с помощью
-внутриorder(-df$col) - Текстовые значения по убыванию: используйте аргумент
decreasing = TRUE - Несколько столбцов:
order(df$a, df$b)— дополнительная сортировка разрешает совпадения - Факторы сортируются по заданному порядку уровней, а не в алфавитном порядке
- После сортировки сбрасывайте имена строк с помощью
row.names(df) <- NULL - Современная альтернатива:
dplyr::arrange()сdesc()для сортировки по убыванию
df <- data.frame(
name = c('Zara', 'Ana', 'Bob', 'Ana'),
score = c(90, 85, 92, 88)
)
# Sort by name asc, score desc
result <- df[order(df$name, -df$score), ]
row.names(result) <- NULL
print(result)Часто задаваемые вопросы
Урок «Сортировка таблиц данных по столбцу» бесплатный?
Да — полный текст урока «Сортировка таблиц данных по столбцу» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.
Чему я научусь в уроке «Сортировка таблиц данных по столбцу»?
Сортируйте целые таблицы данных с помощью order() и arrange() из dplyr. Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать R Academy?
Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Сортировка таблиц данных по столбцу»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке R Academy?
Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Сортировка векторов с помощью sort()
- order() для гибкой сортировки
- Ранжирование значений с помощью rank()
- Сортировка таблиц данных по столбцу