order() do elastycznego sortowania
Uzyskuj permutację indeksów do sortowania według jednego lub wielu kryteriów.
order() do elastycznego sortowania to bezpłatna lekcja R Academy na CoddyKit. To lekcja 2 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 order()
order() nie zwraca posortowanych wartości — zwraca indeksy, według których można posortować wektor. Taka pośrednia reprezentacja sprawia, że funkcja jest znacznie bardziej uniwersalna niż sort(), ponieważ indeksy można zastosować do dowolnej powiązanej struktury.
x <- c(30, 10, 50, 20, 40)
indices <- order(x)
print(indices)
# Verify: x[indices] gives sorted x
print(x[indices])order() w kolejności malejącej
Podobnie jak sort(), funkcja order() przyjmuje argument decreasing = TRUE, aby zwrócić indeksy tworzące sekwencję malejącą. Jest to przydatne przy sortowaniu od największej do najmniejszej wartości.
scores <- c(78, 92, 65, 88, 71)
desc_order <- order(scores, decreasing = TRUE)
cat('Rank order (index):', desc_order, '\n')
cat('Scores high to low:', scores[desc_order], '\n')Sortowanie ramki danych według jednej kolumny
Najbardziej praktycznym zastosowaniem funkcji order() jest sortowanie ramki danych według jednej z jej kolumn. Należy przekazać kolumnę do order(), a następnie użyć zwróconych indeksów do zmiany kolejności wszystkich wierszy ramki danych.
df <- data.frame(
name = c('Charlie', 'Alice', 'Bob', 'Diana'),
age = c(35, 28, 42, 31)
)
sorted_df <- df[order(df$age), ]
print(sorted_df)Sortowanie ramki danych malejąco
Aby posortować ramkę danych od największej do najmniejszej wartości według kolumny liczbowej, należy przekazać decreasing = TRUE do order(). Nazwy wierszy (indeksy) w wyniku odzwierciedlają ich oryginalne pozycje.
products <- data.frame(
item = c('Pen', 'Notebook', 'Stapler', 'Tape'),
price = c(1.5, 4.99, 7.25, 2.10)
)
products[order(products$price, decreasing = TRUE), ]Sortowanie według wielu kolumn
Do funkcji order() należy przekazać wiele wektorów, oddzielając je przecinkami. R sortuje według pierwszego argumentu, a następnie rozstrzyga remisy za pomocą drugiego, trzeciego itd. Działa to podobnie jak klauzula ORDER BY w języku SQL.
df <- data.frame(
dept = c('HR', 'IT', 'HR', 'IT', 'HR'),
salary = c(50000, 70000, 60000, 65000, 55000)
)
# Sort by dept first, then by salary within dept
df[order(df$dept, df$salary), ]Mieszane sortowanie rosnące i malejące
Aby posortować jedną kolumnę rosnąco, a drugą malejąco, należy zanegować malejącą kolumnę liczbową za pomocą -. W przypadku kolumn tekstowych należy użyć xtfrm(), aby uzyskać sortowalną reprezentację całkowitą, a następnie ją zanegować.
df <- data.frame(
dept = c('HR', 'IT', 'HR', 'IT', 'HR'),
salary = c(50000, 70000, 60000, 65000, 55000)
)
# dept ascending, salary descending
df[order(df$dept, -df$salary), ]Obsługa NA w order()
Funkcja order() ma również argument na.last, podobnie jak sort(). Domyślnie na.last = NA, co umieszcza wartości NA na końcu. Ustawienie na.last = TRUE lub na.last = FALSE pozwala jawnie określić ich położenie.
vals <- c(5, NA, 2, NA, 8, 1)
# Default: NAs sorted last
order(vals)
# NAs first
order(vals, na.last = FALSE)Zachowywanie nazw wierszy po sortowaniu
Gdy podzbiór ramki danych jest wybierany za pomocą indeksów wierszy, R zachowuje oryginalne nazwy wierszy. Aby po sortowaniu zresetować je do wartości 1, 2, 3, ..., należy użyć row.names(df) <- NULL lub podejścia z reset=.
df <- data.frame(
city = c('Paris', 'Tokyo', 'NYC'),
pop = c(2.1, 13.9, 8.3)
)
sorted <- df[order(df$pop), ]
print(sorted)
# Reset row names
row.names(sorted) <- NULL
print(sorted)order() a sort() — porównanie
Najważniejsza różnica: sort(x) zwraca posortowane wartości, a order(x) — posortowane pozycje. Należy użyć sort(), gdy potrzebne są tylko wartości, oraz order(), gdy trzeba jednocześnie zmienić kolejność powiązanych struktur danych.
x <- c(50, 20, 80, 10, 60)
cat('sort(x) :', sort(x), '\n')
cat('order(x) :', order(x), '\n')
cat('x[order(x)]:', x[order(x)], '\n')Sortowanie ramki danych według kolumny tekstowej
Można również sortować według kolumn tekstowych. order(df$name) zwraca indeksy wierszy w alfabetycznej kolejności kolumny name, których następnie używa się do zmiany kolejności wierszy ramki danych.
employees <- data.frame(
name = c('Zara', 'Ahmed', 'Maria', 'Bruno'),
tenure = c(3, 7, 2, 5)
)
employees[order(employees$name), ]Łączenie order() w złożonych sortowaniach
Sortowanie trzypoziomowe jest proste: należy przekazać trzy wektory do order(). Każdy kolejny argument służy jako kryterium rozstrzygające remis między równymi wartościami z poprzednich argumentów.
df <- data.frame(
region = c('West', 'East', 'West', 'East', 'West'),
dept = c('HR', 'IT', 'HR', 'IT', 'IT'),
score = c(85, 90, 78, 88, 92)
)
df[order(df$region, df$dept, df$score), ]Szybki test
Co zwraca order(x), gdy zostanie zastosowane do wektora x?
Najważniejsze informacje o order()
Najważniejsze informacje o order():
order(x)zwraca indeksy, a nie wartości — aby uzyskać posortowane wartości, należy użyćx[order(x)]- Ramki danych sortuje się za pomocą
df[order(df$col), ] - Sortowanie według wielu kolumn:
order(df$a, df$b)— remisy wasą rozstrzygane za pomocąb - Kolumny liczbowe należy zanegować za pomocą
-, aby sortować malejąco w sortowaniu wielokolumnowym - Położenie wartości NA kontroluje argument
na.last = TRUE/FALSE/NA - W przeciwieństwie do
sort(),order()umożliwia jednoczesne sortowanie struktur równoległych
df <- data.frame(
name = c('Eve', 'Bob', 'Alice', 'Charlie'),
score = c(88, 92, 88, 75)
)
# Sort by score descending, then name ascending for ties
df[order(-df$score, df$name), ]Często zadawane pytania
Czy lekcja „order() do elastycznego sortowania” jest bezpłatna?
Tak — pełny tekst „order() do elastycznego sortowania” 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 „order() do elastycznego sortowania”?
Uzyskuj permutację indeksów do sortowania według jednego lub wielu kryteriów. Ć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 2 z 4.
Ile czasu zajmuje lekcja „order() do elastycznego sortowania”?
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