Ranking wartości za pomocą rank()
Przypisuj rangi, korzystając z metod rozstrzygania remisów: average, first, min, max i random.
Ranking wartości za pomocą rank() to bezpłatna lekcja R Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.
Co zwraca rank()
rank(x) zwraca rangi obserwacji dla wartości w wektorze. Najmniejsza wartość otrzymuje rangę 1, druga najmniejsza — rangę 2 itd. W przeciwieństwie do order() wynik ma taką samą długość jak dane wejściowe, a każda pozycja zawiera swoją rangę.
scores <- c(78, 92, 65, 88, 71)
ranks <- rank(scores)
print(scores)
print(ranks)Obsługa remisów: metoda average
Gdy wartości są równe (występuje remis), funkcja rank() używa argumentu ties.method, aby określić sposób przypisania rang. Domyślną metodą jest 'average': elementy z remisem otrzymują średnią rang, które zajęłyby bez remisu.
x <- c(10, 20, 20, 30)
# Default: average of positions 2 and 3 = 2.5
rank(x)
rank(x, ties.method = 'average')Metoda remisów: first i last
ties.method = 'first' przypisuje niższą rangę temu z remisujących elementów, który pojawia się wcześniej w wektorze. 'last' działa odwrotnie — wcześniejszy element otrzymuje wyższą rangę.
x <- c(10, 20, 20, 30)
cat('first:', rank(x, ties.method = 'first'), '\n')
cat('last: ', rank(x, ties.method = 'last'), '\n')Metoda remisów: min i max
'min' przypisuje wszystkim remisującym elementom najniższą możliwą rangę (jest to stosowane w sporcie: dwóch zawodników zajmujących ex aequo 3. miejsce otrzymuje rangę 3, a nikt nie otrzymuje rangi 4). 'max' przypisuje wszystkim remisującym elementom najwyższą możliwą rangę.
x <- c(10, 20, 20, 30)
cat('min:', rank(x, ties.method = 'min'), '\n')
cat('max:', rank(x, ties.method = 'max'), '\n')Metoda remisów: random
ties.method = 'random' rozstrzyga remisy, losowo przypisując różne rangi remisującym elementom. Każde wywołanie może dać inny wynik. Metoda jest przydatna, gdy potrzebne są unikatowe rangi całkowite, ale kolejność rozstrzygania remisów nie ma znaczenia.
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')Rangi gęste a standardowe
Funkcja rank() w R tworzy standardowy ranking zawodów (1, 2, 2, 4). Aby uzyskać ranking gęsty (1, 2, 2, 3 — bez luk), należy użyć rank(x, ties.method = 'min') dla unikatowych wartości albo skorzystać z pakietu data.table lub dplyr. Oto rozwiązanie w bazowym R:
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() a order() a sort()
Te trzy funkcje są ze sobą powiązane, ale zwracają różne wartości: sort(x) zwraca posortowane wartości, order(x) zwraca pozycje, według których sortowany jest wektor, a rank(x) zwraca rangę każdej pozycji. Poniżej przedstawiono porównanie obok siebie.
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')Ranking w kolejności malejącej
Aby utworzyć ranking od największej wartości do najmniejszej (ranga 1 = najwyższa wartość), należy zanegować wektor przed przekazaniem go do rank(). Jest to schemat stosowany w tabelach wyników, w których ranga 1 oznacza najlepszy wynik.
scores <- c(78, 92, 65, 88, 71)
desc_ranks <- rank(-scores)
cat('Scores: ', scores, '\n')
cat('Rank (best=1):', desc_ranks, '\n')Dodawanie rang do ramki danych
Częstym zadaniem jest dodanie kolumny rang do ramki danych. Należy użyć rank() z ties.method = 'min' oraz negacji dla kolejności malejącej, aby utworzyć prawidłową tabelę wyników.
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() z wartościami NA
Funkcja rank() ma argument na.last, podobnie jak sort() i order(). Wartość domyślna to 'keep', która przypisuje rangę NA wartościom NA, a elementy inne niż NA szereguje między sobą.
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')Rangi percentylowe
Rangi można przekształcić na percentyle, dzieląc je przez łączną liczbę elementów. Ranga percentylowa informuje, jaka część wartości jest mniejsza lub równa danemu elementowi. Jest to przydatne w statystyce i ocenianiu wyników edukacyjnych.
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), ]Szybkie sprawdzenie
Która wartość ties.method nadaje wszystkim elementom o tej samej wartości tę samą najniższą możliwą rangę (tak jak w sporcie, gdzie dwóch zawodników dzieli 3. miejsce i nikt nie zajmuje 4. miejsca)?
Najważniejsze informacje o rank()
Najważniejsze informacje o rank():
rank(x)zwraca rangę każdego elementu (długość wyniku jest taka sama jak długość danych wejściowych)- Domyślne
ties.method = 'average': elementy o tej samej wartości otrzymują średnią swoich rang 'min'= styl sportowy (wspólna najniższa ranga),'max'= wspólna najwyższa ranga'first'i'last'rozstrzygają remisy według kolejności występowania- Należy użyć
rank(-x)dla rang w kolejności malejącej (ranga 1 = największa wartość) - Kolumny rang w ramkach danych można dodawać za pomocą
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')Ucz się R dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 43
- Lekcje
- 159
Często zadawane pytania
Czy lekcja „Ranking wartości za pomocą rank()” jest bezpłatna?
Tak — pełny tekst „Ranking wartości za pomocą rank()” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Ranking wartości za pomocą rank()”?
Przypisuj rangi, korzystając z metod rozstrzygania remisów: average, first, min, max i random. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć R Academy?
Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Ranking wartości za pomocą rank()”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?
Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Sortowanie wektorów za pomocą sort()
- order() do elastycznego sortowania
- Ranking wartości za pomocą rank()
- Sortowanie ramek danych według kolumny