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