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 — usex[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 emasão resolvidos porb - 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
- Ordenando vetores com sort()
- order() para ordenação flexível
- Classificando valores com rank()
- Ordenando quadros de dados por coluna