Gruppenzusammenfassungen
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 40 von 64.
tapply(values, groups, f) gruppiert die Werte und wendet f in einem Aufruf auf jede Gruppe an. Das Ergebnis ist dasselbe wie bei sapply(split(values, groups), f):
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
print(tapply(amounts, category, sum))
print(tapply(amounts, category, max))Ausgabe:
food fun rent
40 40 20
food fun rent
30 40 20 Das Ergebnis wird nach Gruppen in sortierter Reihenfolge benannt, daher liest [[ ]] eine Gruppe aus und names() listet sie auf:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
avg <- tapply(amounts, category, mean)
print(avg[["food"]])
print(names(avg))Ausgabe:
[1] 20
[1] "food" "fun" "rent"Die Zusammenfassungsfunktion kann deine eigene sein. Hier zählt sie in jeder Gruppe die Bestellungen über 25:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
print(tapply(amounts, category, function(v) sum(v > 25)))Ausgabe:
food fun rent
1 1 0 Das Ergebnis ist ein benannter Vektor, daher finden sort() und which.max() die größte Gruppe. which.max() gibt den ersten Wert bei gleichen Werten zurück:
amounts <- c(10, 20, 30, 40, 5)
category <- c("food", "rent", "food", "fun", "rent")
totals <- tapply(amounts, category, sum)
print(names(totals)[which.max(totals)])
print(names(sort(totals, decreasing = TRUE)))Ausgabe:
[1] "food"
[1] "food" "fun" "rent"Aufgabe
EinfachVervollständige city_report(cities, temps). Gib eine Zeile pro Stadt in alphabetischer Reihenfolge zurück, oslo: avg 4.5, max 9, mit der auf eine Dezimalstelle gerundeten Durchschnittstemperatur und der höchsten Temperatur. Füge anschließend Warmest: gefolgt von der Stadt mit dem höchsten Mittelwert hinzu (bei gleichen Mittelwerten die alphabetisch zuerst stehende).
Der bereitgestellte Code liest die Städte und Temperaturen als zwei durch Kommas getrennte Zeilen gleicher Länge ein und gibt jede zurückgegebene Zeile aus.
Probier es selbst
city_report <- function(cities, temps) {
# Schreibe deinen Code hier
character(0)
}
# Mitgelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
cat(city_report(strsplit(input[1], ",")[[1]], as.numeric(strsplit(input[2], ",")[[1]])), 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