0Pricing
R Academy · Aula

order() para ordenação flexível

Obtenha a permutação de índices para ordenar por um ou vários critérios.

order() para ordenação flexível é uma aula grátis de R Academy no CoddyKit. Esta é a aula 2 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.

O que order() retorna

order() não retorna valores ordenados — retorna os índices que ordenariam o vetor. Essa indireção torna a função muito mais poderosa que sort(), pois você pode aplicar esses índices a qualquer estrutura relacionada.

x <- c(30, 10, 50, 20, 40)
indices <- order(x)
print(indices)
# Verify: x[indices] gives sorted x
print(x[indices])

order() em ordem decrescente

Assim como sort(), order() aceita decreasing = TRUE para retornar índices que produzem uma sequência decrescente. Isso é útil para ordenar do maior para o menor.

scores <- c(78, 92, 65, 88, 71)
desc_order <- order(scores, decreasing = TRUE)
cat('Rank order (index):', desc_order, '\n')
cat('Scores high to low:', scores[desc_order], '\n')

Ordenação de um quadro de dados por uma coluna

O uso mais prático de order() é ordenar um quadro de dados por uma de suas colunas. Passe a coluna para order() e use esses índices para reordenar todas as linhas do quadro de dados.

df <- data.frame(
  name = c('Charlie', 'Alice', 'Bob', 'Diana'),
  age  = c(35, 28, 42, 31)
)
sorted_df <- df[order(df$age), ]
print(sorted_df)

Ordenação decrescente de um quadro de dados

Para ordenar um quadro de dados do maior para o menor com base em uma coluna numérica, passe decreasing = TRUE para order(). Os nomes das linhas (índices) na saída refletem as posições originais.

products <- data.frame(
  item  = c('Pen', 'Notebook', 'Stapler', 'Tape'),
  price = c(1.5, 4.99, 7.25, 2.10)
)
products[order(products$price, decreasing = TRUE), ]

Ordenação por várias colunas

Passe vários vetores para order(), separados por vírgulas. R ordena pelo primeiro argumento e depois resolve os empates usando o segundo, o terceiro e assim por diante. Isso reproduz o comportamento da cláusula ORDER BY do SQL.

df <- data.frame(
  dept   = c('HR', 'IT', 'HR', 'IT', 'HR'),
  salary = c(50000, 70000, 60000, 65000, 55000)
)
# Sort by dept first, then by salary within dept
df[order(df$dept, df$salary), ]

Ordenação múltipla mista, crescente e decrescente

Para ordenar uma coluna em ordem crescente e outra em ordem decrescente, negue a coluna numérica decrescente com -. Para colunas de caracteres, use xtfrm() para obter uma representação inteira ordenável e depois negue-a.

df <- data.frame(
  dept   = c('HR', 'IT', 'HR', 'IT', 'HR'),
  salary = c(50000, 70000, 60000, 65000, 55000)
)
# dept ascending, salary descending
df[order(df$dept, -df$salary), ]

Tratamento de NA em order()

order() também tem um argumento na.last, assim como sort(). Por padrão, na.last = NA, o que coloca os NAs no final. Defina na.last = TRUE ou na.last = FALSE para controlar explicitamente a posição deles.

vals <- c(5, NA, 2, NA, 8, 1)
# Default: NAs sorted last
order(vals)
# NAs first
order(vals, na.last = FALSE)

Preservação dos nomes das linhas após a ordenação

Quando você cria um subconjunto de um quadro de dados usando índices de linhas, R mantém os nomes originais das linhas. Use row.names(df) <- NULL ou abordagens com reset= para redefini-los como 1, 2, 3, ... após a ordenação.

df <- data.frame(
  city = c('Paris', 'Tokyo', 'NYC'),
  pop  = c(2.1, 13.9, 8.3)
)
sorted <- df[order(df$pop), ]
print(sorted)
# Reset row names
row.names(sorted) <- NULL
print(sorted)

order() e sort() lado a lado

A principal diferença: sort(x) retorna valores ordenados; order(x) retorna posições ordenadas. Use sort() quando precisar apenas dos valores; use order() quando precisar reorganizar estruturas de dados relacionadas em conjunto.

x <- c(50, 20, 80, 10, 60)
cat('sort(x)  :', sort(x), '\n')
cat('order(x) :', order(x), '\n')
cat('x[order(x)]:', x[order(x)], '\n')

Ordenação de um quadro de dados por uma coluna de texto

Você também pode ordenar por colunas de caracteres. order(df$name) retorna índices de linhas em ordem alfabética da coluna de nomes, que você então usa para reordenar o quadro de dados.

employees <- data.frame(
  name   = c('Zara', 'Ahmed', 'Maria', 'Bruno'),
  tenure = c(3, 7, 2, 5)
)
employees[order(employees$name), ]

Encadeamento de order() para ordenações complexas

A ordenação em três níveis é simples: passe três vetores para order(). Cada argumento adicional é usado como critério de desempate para valores iguais nos argumentos anteriores.

df <- data.frame(
  region = c('West', 'East', 'West', 'East', 'West'),
  dept   = c('HR', 'IT', 'HR', 'IT', 'IT'),
  score  = c(85, 90, 78, 88, 92)
)
df[order(df$region, df$dept, df$score), ]

Verificação rápida

O que order(x) retorna quando aplicado a um vetor x?

Principais conclusões sobre order()

Principais conclusões sobre order():

  • order(x) retorna índices, não valores — use x[order(x)] para obter os valores ordenados
  • Ordene quadros de dados com df[order(df$col), ]
  • Ordenação por várias colunas: order(df$a, df$b) — empates em a são resolvidos por b
  • Negue colunas numéricas com - para obter ordem decrescente em ordenações múltiplas
  • Controle a posição dos NAs com na.last = TRUE/FALSE/NA
  • Ao contrário de sort(), order() permite ordenar estruturas paralelas em conjunto
df <- data.frame(
  name  = c('Eve', 'Bob', 'Alice', 'Charlie'),
  score = c(88, 92, 88, 75)
)
# Sort by score descending, then name ascending for ties
df[order(-df$score, df$name), ]

Perguntas Frequentes

A aula “order() para ordenação flexível” é grátis?

Sim — o texto completo de “order() para ordenação flexível” é 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 “order() para ordenação flexível”?

Obtenha a permutação de índices para ordenar por um ou vários critérios. 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 2 de 4.

Quanto tempo leva a aula “order() para ordenação flexível”?

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