Sortowanie według klucza
Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 38 z 64.
order(x) zwraca pozycje, które posortowałyby x: najpierw pozycję najmniejszej wartości, potem kolejną i tak dalej. Użyj ich do indeksowania innego wektora, aby posortować go według x:
names <- c("cy", "ada", "bo")
ages <- c(41, 36, 22)
print(order(ages))
print(names[order(ages)])Wynik:
[1] 3 2 1
[1] "bo" "ada" "cy" Aby sortować w kolejności malejącej, przekaż decreasing = TRUE albo umieść znak minus przed kluczem numerycznym:
names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(scores, decreasing = TRUE)])
print(names[order(-scores)])Wynik:
[1] "ada" "cy" "bo"
[1] "ada" "cy" "bo" Podaj funkcji order() drugi klucz, aby rozstrzygać remisy. Tutaj wyniki są sortowane od najwyższego do najniższego, a jednakowe wyniki — według imienia:
names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(-scores, names)])Wynik:
[1] "ada" "bo" "cy" order() zachowuje pierwotną kolejność wartości o jednakowej wartości, gdy nie podano drugiego klucza. Te same pozycje mogą zmienić kolejność kilku powiązanych ze sobą wektorów:
items <- c("tea", "jam", "oil")
price <- c(4, 2.5, 4)
qty <- c(1, 6, 3)
idx <- order(price)
print(items[idx])
print(qty[idx])Wynik:
[1] "jam" "tea" "oil"
[1] 6 1 3Wyzwanie
ŁatwyUzupełnij ranking(names, scores). Zwróć po jednej linii na gracza, 1. ada 95, od najwyższego wyniku do najniższego. Gracze z takim samym wynikiem są wymienieni alfabetycznie.
Dostarczony kod odczytuje graczy jako pary name:score oddzielone przecinkami i wyświetla każdą zwróconą linię.
Spróbuj swoich sił
ranking <- function(names, scores) {
# Wpisz tutaj swój kod
character(0)
}
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
pairs <- strsplit(strsplit(input[1], ",")[[1]], ":")
names <- sapply(pairs, function(p) p[1])
values <- as.numeric(sapply(pairs, function(p) p[2]))
cat(ranking(names, values), sep = "\n")
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Łańcuchy znaków w szczegółach
Podciągi za pomocą substr()Formatowanie za pomocą sprintf()Dzielenie i łączenieWyszukiwanie w łańcuchach znakówZastępowanie tekstuPowtórka – kreator nazwy użytkownika4Macierze
Tworzenie macierzyIndeksowanie macierzyPodsumowania wierszy i kolumnDziałania na macierzachPowtórka – plan miejsc10Zaawansowane sterowanie przepływem
Funkcja switch()Wektorowe ifelse()repeat i breakFunkcje rekurencyjnePodsumowanie — klasyfikator ocen2Wyszukiwanie wartości po kluczach
Wyszukiwanie nazwanych elementów wektoraSprawdzanie kluczyDodawanie i usuwanie kluczyIterowanie po nazwachPowtórzenie — giełda5Projekt — dziennik ocen
Dodawanie uczniówZapisywanie ocen8Sortowanie i grupowanie
Sortowanie wektorówSortowanie według kluczaGrupowanie za pomocą split()Podsumowania grupPowtórka – tabela wyników3Zbiory i zliczanie
Unikalne wartościOperacje na zbiorachTesty przynależnościZliczanie za pomocą table()Podsumowanie — goście wydarzenia6Funkcje jako wartości
Funkcje anonimowePrzekazywanie funkcjiZwracanie funkcjiDomknięcia ze stanemPowtórka — reguły rabatowe9Ramki danych
Tworzenie ramek danychKolumny i wierszeFiltrowanie wierszyDodawanie i sortowaniePodsumowanie – raport sprzedaży12Projekt – śledzenie wydatków
Rejestrowanie wydatkówŁączne wydatkiPoćwicz samodzielnie: Kompilator R online