0Pricing
R Academy · Aula

Ordenando quadros de dados por coluna

Ordene quadros de dados inteiros usando order() e arrange() do dplyr.

Ordenando quadros de dados por coluna é uma aula grátis de R Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.

Ordenando um quadro de dados por uma coluna

A forma padrão de R básico para ordenar um quadro de dados é usar order() na coluna de interesse e usar os índices resultantes para reordenar as linhas. A vírgula após os índices seleciona todas as colunas.

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), ]

Ordenação decrescente com negação

Para colunas numéricas, negue a coluna dentro de order() para inverter a direção da ordenação. O sinal de menos inverte todos os valores, fazendo com que o que era o máximo se torne o mínimo para fins de ordenação.

df <- data.frame(
  name   = c('Charlie', 'Alice', 'Bob', 'Diana'),
  salary = c(55000, 48000, 72000, 61000)
)
# Highest salary first
df[order(-df$salary), ]

Ordenação por várias colunas

Passe várias colunas para order() para ordenar primeiro pelo critério principal e depois pelo secundário. O segundo argumento desfaz os empates do primeiro. Isso corresponde ao ORDER BY col1, col2 do 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), ]

Ordenando colunas de caracteres

A ordenação por uma coluna de caracteres funciona da mesma forma — order() cuida da ordenação lexicográfica. Para obter ordem alfabética inversa, use decreasing = TRUE em vez da negação (a negação funciona apenas com valores numéricos).

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), ]

Redefinindo os números das linhas após a ordenação

Após a ordenação, os nomes das linhas refletem as posições originais (por exemplo, 3, 1, 4, 2). Para redefini-los como inteiros sequenciais começando em 1, defina row.names(df) <- NULL ou envolva o resultado em 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)

Ordenando com valores NA

Quando uma coluna de ordenação contém NA, order() os coloca no final por padrão. Use na.last = FALSE para mover as linhas com NA para o início ou filtre-as antes.

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() como alternativa moderna

O pacote dplyr fornece arrange() como uma alternativa mais limpa. Embora dplyr não faça parte do R básico, conhecer essa sintaxe ajuda você a ler códigos modernos em R. Observação: isRunnable é true aqui apenas para mostrar a sintaxe — dplyr precisa estar instalado para que ela seja executada.

# 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), ]

Ordenando fatores pela ordem dos níveis

Colunas de fatores são ordenadas pela ordem dos níveis, não alfabeticamente. Isso permite definir uma ordem de ordenação personalizada configurando explicitamente os níveis do fator antes da ordenação.

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), ]

Ordenando e selecionando as primeiras linhas

Um padrão comum é ordenar um quadro de dados e depois obter as N primeiras linhas com head() ou as N últimas com tail(). Esse é o equivalente em R básico de ORDER BY ... LIMIT N no SQL.

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)

Ordenação no local versus ordenação atribuída

A ordenação não modifica o quadro de dados original — ela retorna um novo. Sempre atribua o resultado a uma variável (a uma nova variável ou substituindo a original). Substituir a original é adequado quando você não precisa mais da versão não ordenada.

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)

Fluxo de trabalho completo de ordenação

Veja um fluxo de trabalho completo e realista para ordenar um quadro de dados: ordene os funcionários pelo nome do departamento em ordem crescente e depois pelo salário em ordem decrescente, redefina os índices das linhas e exiba o resultado de forma organizada.

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)

Verificação rápida

Como você ordena um quadro de dados df por uma coluna numérica df$salary em ordem decrescente usando R básico?

Ordenação de quadros de dados: principais conclusões

Principais conclusões sobre a ordenação de quadros de dados:

  • Idiomático no R básico: df[order(df$col), ]
  • Numérico em ordem decrescente: negue com - dentro de order(-df$col)
  • Caracteres em ordem decrescente: use o argumento decreasing = TRUE
  • Várias colunas: order(df$a, df$b) — a ordenação secundária desfaz os empates
  • Fatores são ordenados pela ordem de níveis definida, não alfabeticamente
  • Redefina os nomes das linhas com row.names(df) <- NULL após a ordenação
  • Alternativa moderna: dplyr::arrange() com desc() para ordem decrescente
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)

Perguntas Frequentes

A aula “Ordenando quadros de dados por coluna” é grátis?

Sim — o texto completo de “Ordenando quadros de dados por coluna” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.

O que vou aprender em “Ordenando quadros de dados por coluna”?

Ordene quadros de dados inteiros usando order() e arrange() do dplyr. Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar R Academy?

Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Ordenando quadros de dados por coluna”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de R Academy?

Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Ordenando vetores com sort()
  2. order() para ordenação flexível
  3. Classificando valores com rank()
  4. Ordenando quadros de dados por coluna
← Voltar para R Academy