Grupowanie za pomocą split()
Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 39 z 64.
split(values, groups) umieszcza każdą wartość w grupie nazwanej zgodnie z odpowiadającym jej elementem groups. Wynik to lista z jednym elementem na grupę, nazwanym zgodnie z grupami w kolejności sortowania:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
by_cat <- split(amounts, category)
print(names(by_cat))
print(by_cat[["food"]])Wynik:
[1] "food" "fun" "rent"
[1] 10 30Połącz split() z sapply(), aby obliczyć jedno podsumowanie dla każdej grupy:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
by_cat <- split(amounts, category)
print(sapply(by_cat, sum))
print(sapply(by_cat, length))Wynik:
food fun rent
40 40 20
food fun rent
2 1 1 Wartościami mogą być również teksty, na przykład gdy grupujemy nazwy według ich pierwszej litery:
names <- c("ana", "bo", "al", "bea", "cy")
groups <- split(names, substr(names, 1, 1))
for (letter in names(groups)) {
cat(letter, ":", paste(groups[[letter]], collapse = ", "), "\n")
}Wynik:
a : ana, al
b : bo, bea
c : cy Grupa istnieje tylko wtedy, gdy należy do niej co najmniej jedna wartość, dlatego przed odczytaniem grupy, która może być pusta, sprawdź za pomocą %in% names():
by_cat <- split(c(5, 7), c("food", "food"))
print("rent" %in% names(by_cat))Wynik:
[1] FALSEWyzwanie
ŁatwyUzupełnij category_totals(amounts, categories). Zwróć jeden wiersz dla każdej kategorii w kolejności alfabetycznej, food: 40 (2 items), zawierający łączną kwotę oraz liczbę kwot w tej kategorii.
Dostarczony kod odczytuje kwoty i kategorie z dwóch rozdzielonych przecinkami wierszy o tej samej długości i wypisuje każdy zwrócony wiersz.
Spróbuj swoich sił
category_totals <- function(amounts, categories) {
# Wpisz tutaj swój kod
character(0)
}
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
cat(category_totals(as.numeric(strsplit(input[1], ",")[[1]]), 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