Nach einem Schlüssel sortieren
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 38 von 64.
order(x) gibt die Positionen zurück, die x sortieren würden: zuerst die Position des kleinsten Werts, dann die des nächsten und so weiter. Indiziere einen anderen Vektor damit, um diesen Vektor nach x zu sortieren:
names <- c("cy", "ada", "bo")
ages <- c(41, 36, 22)
print(order(ages))
print(names[order(ages)])Ausgabe:
[1] 3 2 1
[1] "bo" "ada" "cy" Für die absteigende Reihenfolge übergib decreasing = TRUE oder setze ein Minuszeichen vor einen numerischen Schlüssel:
names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(scores, decreasing = TRUE)])
print(names[order(-scores)])Ausgabe:
[1] "ada" "cy" "bo"
[1] "ada" "cy" "bo" Gib order() einen zweiten Schlüssel, um Gleichstände aufzulösen. Hier werden die Punktzahlen von hoch nach niedrig sortiert und gleiche Punktzahlen nach Namen sortiert:
names <- c("cy", "ada", "bo")
scores <- c(80, 95, 80)
print(names[order(-scores, names)])Ausgabe:
[1] "ada" "bo" "cy" order() behält gebundene Werte in ihrer ursprünglichen Reihenfolge bei, wenn kein zweiter Schlüssel angegeben wird. Mit denselben Positionen können mehrere zusammengehörige Vektoren neu angeordnet werden:
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])Ausgabe:
[1] "jam" "tea" "oil"
[1] 6 1 3Aufgabe
EinfachVervollständige ranking(names, scores). Gib eine Zeile pro Spieler zurück, 1. ada 95, vom höchsten zum niedrigsten Punktestand. Spieler mit demselben Punktestand werden alphabetisch aufgelistet.
Der bereitgestellte Code liest die Spieler als durch Kommas getrennte name:score-Paare ein und gibt jede zurückgegebene Zeile aus.
Probier es selbst
ranking <- function(names, scores) {
# Schreibe deinen Code hier
character(0)
}
# Mitgelieferter Ein-/Ausgabecode: belasse ihn wie er ist
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")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik und Ablaufsteuerung
1Strings im Detail
Teilstrings mit substr()Formatierung mit sprintf()Aufteilen und VerbindenStrings durchsuchenText ersetzenWiederholung – Benutzernamen-Generator4Matrizen
Matrizen erstellenMatrizen indizierenZusammenfassungen von Zeilen und SpaltenMatrizenarithmetikRückblick – Sitzplan10Fortgeschrittener Kontrollfluss
Die switch()-FunktionVektorisierter ifelse()repeat und breakRekursive FunktionenRückblick – Notenklassifizierung2Schlüssel-Wert-Suchen
Benannte Vektor-SuchenSchlüssel prüfenSchlüssel hinzufügen und entfernenNamen durchlaufenRückblick – Aktienübersicht5Projekt – Notenbuch
Schüler hinzufügenNoten eintragen8Sortieren und Gruppieren
Vektoren sortierenNach einem Schlüssel sortierenGruppieren mit split()GruppenzusammenfassungenRückblick – Rangliste3Mengen und Zählen
Eindeutige WerteMengenoperationenZugehörigkeitstestsZählen mit table()Rückblick – Gäste einer Veranstaltung6Funktionen als Werte
Anonyme FunktionenFunktionen übergebenFunktionen zurückgebenClosures mit ZustandRückblick – Rabattregeln9Datenrahmen
Datenrahmen erstellenSpalten und ZeilenZeilen filternHinzufügen und SortierenZusammenfassung – Verkaufsbericht12Projekt – Ausgaben-Tracker
Ausgaben erfassenGesamtausgabenÜbe selbstständig: Online-R-Compiler