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"Wyzwanie
ŁatwyUzupeł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")
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