Menu
Coddy logo textTech

Podsumowania grup

Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 40 z 64.

tapply(values, groups, f) grupuje wartości i stosuje f do każdej grupy w jednym wywołaniu. Daje taki sam wynik jak 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))

Wynik:

food  fun rent 
  40   40   20 
food  fun rent 
  30   40   20 

Wynik jest nazwany według grup w posortowanej kolejności, więc [[ ]] odczytuje jedną grupę, a names() wyświetla ich nazwy:

amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
avg <- tapply(amounts, category, mean)
print(avg[["food"]])
print(names(avg))

Wynik:

[1] 20
[1] "food" "fun"  "rent"

Funkcja podsumowująca może być własna. Tutaj zlicza zamówienia powyżej 25 w każdej grupie:

amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
print(tapply(amounts, category, function(v) sum(v > 25)))

Wynik:

food  fun rent 
   1    1    0 

Wynikiem jest nazwany wektor, więc sort() i which.max() znajdują największą grupę. which.max() zwraca pierwszą z równych wartości:

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)))

Wynik:

[1] "food"
[1] "food" "fun"  "rent"
challenge icon

Wyzwanie

Łatwy

Uzupełnij city_report(cities, temps). Zwróć po jednym wierszu na miasto w kolejności alfabetycznej, oslo: avg 4.5, max 9, ze średnią temperaturą zaokrągloną do jednego miejsca po przecinku oraz najwyższą temperaturą. Następnie dodaj Warmest: , po którym podaj miasto z najwyższą średnią (w przypadku remisu średnich — pierwsze w kolejności alfabetycznej).

Dostarczony kod odczytuje miasta i temperatury jako dwa wiersze zawierające wartości oddzielone przecinkami, o tej samej długości, i wypisuje każdy zwrócony wiersz.

Spróbuj swoich sił

city_report <- function(cities, temps) {
  # Wpisz tutaj swój kod
  character(0)
}

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
cat(city_report(strsplit(input[1], ",")[[1]], as.numeric(strsplit(input[2], ",")[[1]])), sep = "\n")
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator R online