How to sort columns alphabetically

tidyselect
tidyverse
Learn how to sort columns alphabetically with this comprehensive R tutorial. Includes practical examples and code snippets.
Published

November 17, 2022

Introduction

Sorting columns alphabetically helps organize your data and makes it easier to locate specific variables. This is particularly useful when working with wide datasets that have many columns, or when you need to present data in a standardized format for reports.

Getting Started

library(tidyverse)
library(palmerpenguins)

Example 1: Basic Usage

The Problem

We have a dataset with columns in random order and want to arrange them alphabetically. This makes the data structure more predictable and easier to navigate.

Step 1: View the original column order

Let’s examine the current structure of our dataset.

# Check original column names
names(penguins)

This shows us the current order: species, island, bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g, sex, year.

Step 2: Sort columns alphabetically

We’ll use select() with sort() to reorder columns alphabetically.

# Sort columns alphabetically
penguins_sorted <- penguins |>
  select(sort(names(penguins)))

names(penguins_sorted)

Now the columns are arranged alphabetically: bill_depth_mm, bill_length_mm, body_mass_g, flipper_length_mm, island, sex, species, year.

Step 3: Keep specific columns first

Sometimes you want certain important columns to stay at the beginning.

# Keep 'species' first, then sort the rest
penguins_custom <- penguins |>
  select(species, sort(setdiff(names(penguins), "species")))

head(penguins_custom, 3)

This maintains ‘species’ as the first column while sorting all others alphabetically.

Example 2: Practical Application

The Problem

You’re preparing a research dataset for publication and need to standardize column order across multiple similar datasets. The funding agency requires alphabetical column ordering for consistency, but you want to keep ID columns first.

Step 1: Create a sample dataset

Let’s work with the mtcars dataset which has various car specifications.

# View original mtcars structure
car_data <- mtcars |>
  rownames_to_column("car_model")

names(car_data)

The original columns are in a mixed order that doesn’t follow any clear pattern.

Step 2: Sort with important columns first

We’ll keep the car model identifier first, then sort remaining columns.

# Keep car_model first, sort others alphabetically
organized_cars <- car_data |>
  select(car_model, sort(setdiff(names(car_data), "car_model")))

names(organized_cars)

Now we have car_model first, followed by all other columns in alphabetical order.

Step 3: Handle grouped sorting

For more complex sorting, we can group certain types of columns together.

# Separate numeric and character columns, sort each group
char_cols <- names(select_if(car_data, is.character))
num_cols <- names(select_if(car_data, is.numeric))

final_cars <- car_data |>
  select(all_of(sort(char_cols)), all_of(sort(num_cols)))

This approach groups character columns first (sorted alphabetically), then numeric columns (also sorted alphabetically).

Step 4: Verify the final structure

Let’s confirm our sorting worked as expected.

# Display the new structure
glimpse(final_cars)

The dataset now has a clean, predictable structure that’s easy to navigate and meets standardization requirements.

Summary

  • Use select(sort(names(data))) for complete alphabetical column sorting
  • Combine select(important_col, sort(setdiff(names(data), "important_col"))) to keep key columns first
  • Apply setdiff() to exclude specific columns from alphabetical sorting
  • Use select_if() with sort() to group columns by type before alphabetical ordering
  • Column sorting improves data organization and makes datasets more professional and standardized