De complete gids: hoe u sort(), order() en rank() gebruikt in r
Drie functies van R die mensen vaak verwarren zijn sorteren , ordenen en rangschikken .
Hier is het verschil tussen deze functies:
- sort() sorteert een vector in oplopende volgorde
- order() retourneert de index van elk element van een vector in gesorteerde volgorde
- Rank() wijst een rang toe aan elk element van een vector (kleinste = 1)
Het volgende voorbeeld laat zien hoe u elk van deze functies in de praktijk kunt gebruiken.
Voorbeeld: Gebruik sort(), order() en Rank() met vectoren
De volgende code laat zien hoe u de functies sort() , order() en Rank() gebruikt met een vector met vier waarden:
#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
Dit is wat elke functie deed:
1. De functie sort() sorteerde eenvoudigweg de vectorwaarden in oplopende volgorde.
2. De functie order() retourneert de index van elk element in gesorteerde volgorde.
- Als je op basis van deze indexwaarden de originele vectorwaarden ordent, krijg je een gesorteerde vector.
- Order() vertelt ons bijvoorbeeld dat we de waarde eerst op indexpositie 1 moeten plaatsen – het is 0 in de originele vector.
- Vervolgens vertelt order() ons dat we de waarde vervolgens op indexpositie 3 moeten plaatsen – dat is 10 in de originele vector.
- Vervolgens vertelt order() ons dat we de waarde vervolgens op indexpositie 4 moeten plaatsen – dat is 15 in de originele vector.
- Vervolgens vertelt order() ons dat we de waarde vervolgens op indexpositie 2 moeten plaatsen – dat is 20 in de originele vector.
- Het eindresultaat is een gesorteerde vector – 0, 10, 15, 20.
3. De functie Rank() kende een rang toe aan elk element van de vector, waarbij 1 werd gebruikt voor de kleinste waarde.
- Rank() vertelt ons bijvoorbeeld dat de eerste waarde van de originele vector de kleinste is (rang = 1) en dat de tweede waarde van de originele vector de grootste is (rang = 4).
Merk op dat we de volgende syntaxis kunnen gebruiken om sort() , order() en rank() in omgekeerde volgorde te gebruiken:
#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
Merk op dat deze resultaten precies het tegenovergestelde zijn van die in de voorgaande voorbeelden.
Opmerking: Hoe om te gaan met relaties met de functie Rank().
We kunnen het argument tie.method gebruiken om te specificeren hoe we met banden moeten omgaan bij het gebruik van de functie Rank() :
rank(x, ties. method = ' average ')
U kunt een van de volgende opties gebruiken om op te geven hoe met koppelingen moet worden omgegaan:
- gemiddelde : (standaard) Wijst aan elk gekoppeld item de gemiddelde rangorde toe (items op de derde en vierde plaats krijgen beide een rangorde van 3,5)
- eerste : wijst het eerste gekoppelde element toe aan de laagste rang (elementen gerangschikt op de 3e en 4e positie krijgen respectievelijk rang 3 en 4)
- min : wijst elk gekoppeld item toe aan de laagste rang (items op de derde en vierde plaats krijgen beide een rangorde van 3)
- max : wijst elk gekoppeld item de hoogste rang toe (items op de derde en vierde plaats krijgen beide een rang van 4)
- willekeurig : wijst elk gelijk element een willekeurige rang toe (elk element dat op de 3e en 4e positie staat, kan beide rang krijgen)
Afhankelijk van uw scenario kan een van deze methoden zinvoller zijn om te gebruiken dan de andere.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende bewerkingen in R kunt uitvoeren:
Sorteren op meerdere kolommen in R
Hoe een dataframe op datum te sorteren in R
Hoe de percentielrang in R te berekenen