0Pricing
R Academy · Aula

Classificando valores com rank()

Atribua classificações com métodos de desempate: average, first, min, max e random.

Classificando valores com rank() é uma aula grátis de R Academy no CoddyKit. Esta é a aula 3 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 rank() retorna

rank(x) retorna as classificações amostrais dos valores em um vetor. O menor valor recebe a classificação 1, o segundo menor recebe a classificação 2 e assim por diante. Ao contrário de order(), a saída tem o mesmo comprimento da entrada, e cada posição contém sua classificação.

scores <- c(78, 92, 65, 88, 71)
ranks <- rank(scores)
print(scores)
print(ranks)

Tratamento de empates: método da média

Quando os valores são iguais (empatados), rank() usa o argumento ties.method para decidir como atribuir as classificações. O padrão é 'average': elementos empatados recebem a média das classificações que ocupariam.

x <- c(10, 20, 20, 30)
# Default: average of positions 2 and 3 = 2.5
rank(x)
rank(x, ties.method = 'average')

Método de empates: first e last

ties.method = 'first' atribui a classificação mais baixa ao elemento empatado que aparece primeiro no vetor. 'last' faz o oposto — o elemento que aparece antes recebe a classificação mais alta.

x <- c(10, 20, 20, 30)
cat('first:', rank(x, ties.method = 'first'), '\n')
cat('last: ', rank(x, ties.method = 'last'),  '\n')

Método de empates: min e max

'min' atribui a todos os elementos empatados a menor classificação que poderiam ter (usado em esportes: dois jogadores empatados em terceiro lugar recebem a classificação 3, e ninguém recebe a classificação 4). 'max' atribui a todos os elementos empatados a maior classificação.

x <- c(10, 20, 20, 30)
cat('min:', rank(x, ties.method = 'min'), '\n')
cat('max:', rank(x, ties.method = 'max'), '\n')

Método de empates: random

ties.method = 'random' resolve os empates atribuindo aleatoriamente classificações distintas entre os elementos empatados. Cada chamada pode produzir um resultado diferente. É útil quando você precisa de classificações inteiras únicas, mas não se importa com a ordem usada para resolver os empates.

x <- c(10, 20, 20, 20, 30)
set.seed(42)
cat('random run 1:', rank(x, ties.method = 'random'), '\n')
set.seed(99)
cat('random run 2:', rank(x, ties.method = 'random'), '\n')

Classificação densa versus classificação padrão

O rank() de R produz uma classificação de competição padrão (1, 2, 2, 4). Para uma classificação densa (1, 2, 2, 3 — sem lacunas), use rank(x, ties.method = 'min') em valores únicos ou use os pacotes data.table ou dplyr. Eis uma solução alternativa usando R básico:

x <- c(10, 20, 20, 30)
# Standard ranking (gaps after ties)
cat('Standard:', rank(x, ties.method = 'min'), '\n')
# Dense ranking: rank of sorted unique values
dense <- match(x, sort(unique(x)))
cat('Dense:   ', dense, '\n')

rank() vs order() vs sort()

Estas três funções estão relacionadas, mas retornam coisas diferentes: sort(x) retorna valores ordenados, order(x) retorna as posições que ordenam o vetor e rank(x) retorna a classificação de cada posição. Veja uma comparação lado a lado.

x <- c(30, 10, 50, 20, 40)
cat('x       :', x,        '\n')
cat('sort(x) :', sort(x),  '\n')
cat('order(x):', order(x), '\n')
cat('rank(x) :', rank(x),  '\n')

Classificação em ordem decrescente

Para classificar do maior para o menor (classificação 1 = maior valor), negue o vetor antes de passá-lo para rank(). Esse é o padrão usado em tabelas de classificação, nas quais a classificação 1 significa o melhor resultado.

scores <- c(78, 92, 65, 88, 71)
desc_ranks <- rank(-scores)
cat('Scores:      ', scores,     '\n')
cat('Rank (best=1):', desc_ranks, '\n')

Adicionando classificações a um quadro de dados

Uma tarefa comum é adicionar uma coluna de classificação a um quadro de dados. Use rank() com ties.method = 'min' e faça a negação para obter ordem decrescente e criar uma tabela de classificação adequada.

df <- data.frame(
  player = c('Alice', 'Bob', 'Carol', 'Dave'),
  score  = c(250, 400, 250, 375)
)
df$rank <- rank(-df$score, ties.method = 'min')
df[order(df$rank), ]

rank() com valores NA

rank() tem um argumento na.last, assim como sort() e order(). O padrão é 'keep', que atribui a classificação NA aos valores NA enquanto classifica entre si os elementos que não são NA.

x <- c(5, NA, 2, NA, 8, 1)
cat('na.last=keep:  ', rank(x, na.last = 'keep'), '\n')
cat('na.last=TRUE:  ', rank(x, na.last = TRUE),   '\n')
cat('na.last=FALSE: ', rank(x, na.last = FALSE),  '\n')

Classificações percentílicas

Converta as classificações em percentis dividindo-as pela contagem total. Uma classificação percentílica informa qual fração dos valores é menor ou igual a determinado elemento. Isso é útil em estatística e na atribuição de notas educacionais.

scores <- c(60, 75, 82, 91, 68, 77, 85, 95)
n <- length(scores)
pct_rank <- rank(scores) / n * 100
result <- data.frame(score = scores, percentile = round(pct_rank, 1))
result[order(result$score), ]

Verificação rápida

Qual ties.method atribui a todos os elementos empatados a mesma classificação mais baixa possível (como nos esportes, quando dois jogadores dividem o 3º lugar e ninguém fica em 4º)?

Principais conclusões sobre rank()

Principais conclusões sobre rank():

  • rank(x) retorna a classificação de cada elemento (com o mesmo comprimento da entrada)
  • Padrão ties.method = 'average': elementos empatados compartilham a média de suas classificações
  • 'min' = estilo esportivo (classificação mais baixa compartilhada), 'max' = classificação mais alta compartilhada
  • 'first' e 'last' desfazem empates pela ordem de aparição
  • Use rank(-x) para classificações decrescentes (classificação 1 = maior valor)
  • Adicione colunas de classificação a quadros de dados com df$rank <- rank(-df$score, ties.method='min')
x <- c(10, 30, 20, 30, 10)
cat('average:', rank(x, ties.method = 'average'), '\n')
cat('min:    ', rank(x, ties.method = 'min'),     '\n')
cat('max:    ', rank(x, ties.method = 'max'),     '\n')
cat('first:  ', rank(x, ties.method = 'first'),   '\n')

Perguntas Frequentes

A aula “Classificando valores com rank()” é grátis?

Sim — o texto completo de “Classificando valores com rank()” é 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 “Classificando valores com rank()”?

Atribua classificações com métodos de desempate: average, first, min, max e random. 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 3 de 4.

Quanto tempo leva a aula “Classificando valores com rank()”?

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