O guia completo: como usar sort(), order() e rank() em r
Três funções do R que as pessoas costumam confundir são classificação , ordenação e classificação .
Aqui está a diferença entre essas funções:
- sort() irá classificar um vetor em ordem crescente
- order() retornará o índice de cada elemento de um vetor em ordem de classificação
- Rank() atribuirá uma classificação a cada elemento de um vetor (menor = 1)
O exemplo a seguir mostra como usar cada uma dessas funções na prática.
Exemplo: Use sort(), order() e Rank() com vetores
O código a seguir mostra como usar as funções sort() , order() e Rank() com um vetor de quatro valores:
#createvector
x <- c(0, 20, 10, 15)
#sort vector
sort(s)
[1] 0 10 15 20
#order vector
order(s)
[1] 1 3 4 2
#rank vector
rank(x)
[1] 1 4 2 3
Aqui está o que cada função fez:
1. A função sort() simplesmente classificou os valores do vetor em ordem crescente.
2. A função order() retornou o índice de cada elemento na ordem de classificação.
- Se você colocar os valores originais do vetor em ordem com base nesses valores de índice, obterá um vetor classificado.
- Por exemplo, order() nos diz para primeiro colocar o valor na posição 1 do índice – é 0 no vetor original.
- Então order() nos diz para colocar o valor na posição 3 do índice – isso é 10 no vetor original.
- Então order() nos diz para colocar o valor na posição 4 do índice – isso é 15 no vetor original.
- Então order() nos diz para colocar o valor na posição 2 do índice – isso é 20 no vetor original.
- O resultado final é um vetor classificado – 0, 10, 15, 20.
3. A função Rank() atribuiu uma classificação a cada elemento do vetor, usando 1 para o menor valor.
- Por exemplo, Rank() nos diz que o primeiro valor do vetor original é o menor (classificação = 1) e que o segundo valor do vetor original é o maior (classificação = 4).
Observe que podemos usar a seguinte sintaxe para usar sort() , order() e rank() na ordem inversa:
#createvector
x <- c(0, 20, 10, 15)
#sort vector in decreasing order
sort(x, decreasing= TRUE )
[1] 20 15 10 0
#order vector in decreasing order
order(x, decreasing= TRUE )
[1] 2 4 3 1
#rank vector in reverse order (largest value = 1)
rank(-x)
[1] 4 1 3 2
Observe que esses resultados são exatamente o oposto daqueles produzidos nos exemplos anteriores.
Nota: Como lidar com empates com a função Rank()
Podemos usar o argumento tie.method para especificar como devemos lidar com empates ao usar a função Rank() :
rank(x, ties. method = ' average ')
Você pode usar uma das seguintes opções para especificar como lidar com links:
- média : (padrão) atribui a cada item vinculado a classificação média (os itens classificados em 3º e 4º receberiam uma classificação de 3,5)
- primeiro : Atribui o primeiro elemento vinculado à classificação mais baixa (os elementos classificados na 3ª e 4ª posições receberiam as classificações 3 e 4, respectivamente)
- min : Atribui cada item vinculado à classificação mais baixa (os itens classificados em 3º e 4º receberiam uma classificação de 3)
- max : atribui a cada item vinculado a classificação mais alta (os itens classificados em 3º e 4º receberiam uma classificação de 4)
- random : atribui a cada elemento empatado uma classificação aleatória (qualquer elemento empatado na 3ª e 4ª posição pode receber qualquer uma das classificações)
Dependendo do seu cenário, um desses métodos pode fazer mais sentido usar do que os outros.
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras operações comuns em R:
Como classificar por múltiplas colunas em R
Como classificar um quadro de dados por data em R
Como calcular a classificação percentil em R