Menu
Coddy logo textTech

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"
challenge icon

Aufgabe

Einfach

Vervollstä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")
quiz iconTeste dich selbst

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

Übe selbstständig: Online-R-Compiler