Een data frame sorteren rangschikken
Terminologie
Nu moeten we letten op de terminologie: onder sorteren verstaan we in de volksmond soms dat we iets aflopen of oplopend sorteren. Echter is sorteren het plaatsen van elementen in de daarvoor gedefinieerde juiste doelen. Net zoals je als baby de juiste figuurtjes (driehoekje, blokje en rondje) in het juiste gat moest stoppen. Echter bedoelen we hier rangschikken: van hoog naar laag of van laag naar hoog.
Naast rangschikken op de salarissen kunnen we de data frame werknemers
nu ook rangschikken op de kolom functiesPersonen2
. Om te rangschikken in R, gebruik je de order
functie. Aan de hand van de volgende voorbeelden zullen we zien dat rangschikken in R vrij eenvoudig is.
In het artikel [6] Sorting data, (Kabacoff, 2014) wordt een handig overzicht gegeven over hoe je kunt sorteren in R.
# het werknemersbestand oplopend rangschikken op salarissen
werknemersbestand[order(werknemersbestand$salarissenPersonen),]
## namenPersonen salarissenPersonen functiesPersonen functiesPersonen2
## 4 Marco 2000 Junior Junior
## 10 Winston 2000 Facilitair Facilitair
## 2 Rosemarijn 2800 Secretariaat Secretariaat
## 8 Francis 3100 Senior Senior
## 5 Koen 3600 Senior Senior
## 3 Arie 5000 Senior Senior
## 6 Noah 5000 Senior Senior
## 9 Henk 6000 Partner Partner
## 7 Helga 7000 Partner Partner
## 1 Jack 9000 Managing partner Managing partner
# het werknemersbestand aflopend rangschikken op salarissen
werknemersbestand[order(-werknemersbestand$salarissenPersonen),]
## namenPersonen salarissenPersonen functiesPersonen functiesPersonen2
## 1 Jack 9000 Managing partner Managing partner
## 7 Helga 7000 Partner Partner
## 9 Henk 6000 Partner Partner
## 3 Arie 5000 Senior Senior
## 6 Noah 5000 Senior Senior
## 5 Koen 3600 Senior Senior
## 8 Francis 3100 Senior Senior
## 2 Rosemarijn 2800 Secretariaat Secretariaat
## 4 Marco 2000 Junior Junior
## 10 Winston 2000 Facilitair Facilitair
# het werknemers bestand aflopend rangschikken op functie (zonder hiërarchie)
werknemersbestand[order(-werknemersbestand$functiesPersonen),]
## Warning in Ops.factor(werknemersbestand$functiesPersonen): '-' not
## meaningful for factors
## namenPersonen salarissenPersonen functiesPersonen functiesPersonen2
## 1 Jack 9000 Managing partner Managing partner
## 2 Rosemarijn 2800 Secretariaat Secretariaat
## 3 Arie 5000 Senior Senior
## 4 Marco 2000 Junior Junior
## 5 Koen 3600 Senior Senior
## 6 Noah 5000 Senior Senior
## 7 Helga 7000 Partner Partner
## 8 Francis 3100 Senior Senior
## 9 Henk 6000 Partner Partner
## 10 Winston 2000 Facilitair Facilitair
# het werknemers bestand aflopend rangschikken op functie (met hiërarchie)
werknemersbestand[order(werknemersbestand$functiesPersonen2),]
## namenPersonen salarissenPersonen functiesPersonen functiesPersonen2
## 1 Jack 9000 Managing partner Managing partner
## 7 Helga 7000 Partner Partner
## 9 Henk 6000 Partner Partner
## 3 Arie 5000 Senior Senior
## 5 Koen 3600 Senior Senior
## 6 Noah 5000 Senior Senior
## 8 Francis 3100 Senior Senior
## 4 Marco 2000 Junior Junior
## 2 Rosemarijn 2800 Secretariaat Secretariaat
## 10 Winston 2000 Facilitair Facilitair
Zoals je kunt zien, kunnen we sorteren op de functies in de volgorde die we voor de factor gedefinieerd hebben.
De laatste tabel is gerangschikt op de functie (de factor-versie). Als we naar de Senior werknemers kijken, is het misschien een goede toevoeging om binnen een bepaalde functie aan werknemers een rangschikking (aflopend) van de salarissen toe te voegen. Op dit moment zie je namelijk dat de salarissen nog niet zijn gerangschikt Dit kunnen we eenvoudig doen door een extra argument aan de order
functie toe te voegen. Namelijk salarissenPersonen
als secondaire rangschikking.
# Het werknemers bestand aflopend rangschikken op functie (met hiërarchie)
werknemersbestand[order(werknemersbestand$functiesPersonen2,
-werknemersbestand$salarissenPersonen),]
## namenPersonen salarissenPersonen functiesPersonen functiesPersonen2
## 1 Jack 9000 Managing partner Managing partner
## 7 Helga 7000 Partner Partner
## 9 Henk 6000 Partner Partner
## 3 Arie 5000 Senior Senior
## 6 Noah 5000 Senior Senior
## 5 Koen 3600 Senior Senior
## 8 Francis 3100 Senior Senior
## 4 Marco 2000 Junior Junior
## 2 Rosemarijn 2800 Secretariaat Secretariaat
## 10 Winston 2000 Facilitair Facilitair
Het eindresultaat is dat de werknemers op functies zijn gerangschikt, en binnen de functies op hun salaris zijn gerangschikt.