Kompletny przewodnik: jak używać funkcji sort(), order() i rank() w języku r
Trzy funkcje języka R, które ludzie często mylą, to sortowanie , porządkowanie i rankingowanie .
Oto różnica między tymi funkcjami:
- sort() posortuje wektor w kolejności rosnącej
- Order() zwróci indeks każdego elementu wektora w posortowanej kolejności
- Rank() przypisze rangę do każdego elementu wektora (najmniejszy = 1)
Poniższy przykład pokazuje, jak w praktyce wykorzystać każdą z tych funkcji.
Przykład: użyj sort(), Order() i Rank() z wektorami
Poniższy kod pokazuje, jak używać funkcji sort() , Order() i Rank() z wektorem czterowartościowym:
#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
Oto, co zrobiła każda funkcja:
1. Funkcja sort() po prostu posortowała wartości wektorów w kolejności rosnącej.
2. Funkcja Order() zwróciła indeks każdego elementu w posortowanej kolejności.
- Jeśli uporządkujesz oryginalne wartości wektorów w oparciu o te wartości indeksów, otrzymasz posortowany wektor.
- Na przykład funkcja Order() każe nam najpierw umieścić wartość na pozycji indeksu 1 – w oryginalnym wektorze jest to 0.
- Następnie funkcja Order() każe nam umieścić wartość na pozycji indeksu 3 – czyli 10 w oryginalnym wektorze.
- Następnie funkcja Order() każe nam umieścić wartość na pozycji indeksu 4 – czyli 15 w oryginalnym wektorze.
- Następnie funkcja Order() każe nam umieścić wartość na pozycji indeksu 2 – czyli 20 w oryginalnym wektorze.
- Efektem końcowym jest posortowany wektor – 0, 10, 15, 20.
3. Funkcja Rank() przypisała rangę każdemu elementowi wektora, używając 1 dla najmniejszej wartości.
- Na przykład funkcja Rank() mówi nam, że pierwsza wartość pierwotnego wektora jest najmniejsza (ranga = 1), a druga wartość pierwotnego wektora jest największa (ranga = 4).
Zauważ, że możemy użyć następującej składni, aby użyć sort() , Order() i rank() w odwrotnej kolejności:
#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
Należy zauważyć, że wyniki te są dokładnie przeciwne do uzyskanych w poprzednich przykładach.
Uwaga: Jak radzić sobie z powiązaniami za pomocą funkcji Rank().
Możemy użyć argumentu tie.method , aby określić, jak powinniśmy postępować z remisami podczas korzystania z funkcji Rank() :
rank(x, ties. method = ' average ')
Aby określić sposób obsługi łączy, możesz użyć jednej z następujących opcji:
- średnia : (domyślnie) Przypisuje każdemu połączonemu elementowi średnią rangę (obiekty zajmujące 3. i 4. miejsce otrzymają ocenę 3,5)
- pierwszy : przypisuje pierwszy połączony element do najniższej rangi (elementy zajmujące pozycje 3 i 4 otrzymają odpowiednio rangi 3 i 4)
- min : Przypisuje każdemu połączonemu przedmiotowi najniższą rangę (obiekty o randze 3 i 4 otrzymają rangę 3)
- max : Przypisuje każdemu połączonemu przedmiotowi najwyższą rangę (obiekty o randze 3 i 4 otrzymają rangę 4)
- losowy : przypisuje każdemu remisującemu elementowi losową rangę (każdy element remisujący na 3. i 4. miejscu może otrzymać dowolną rangę)
W zależności od scenariusza użycie jednej z tych metod może być bardziej sensowne niż pozostałych.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak wykonywać inne typowe operacje w języku R:
Jak sortować według wielu kolumn w R
Jak posortować ramkę danych według daty w R
Jak obliczyć rangę percentylową w R