Raggruppare con split()
Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 39 di 64.
split(values, groups) inserisce ogni valore nel gruppo denominato dall'elemento corrispondente di groups. Il risultato è una lista con un elemento per ogni gruppo, denominati in base ai gruppi in ordine alfabetico:
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"]])Output:
[1] "food" "fun" "rent"
[1] 10 30Combina split() con sapply() per calcolare un riepilogo per ogni gruppo:
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))Output:
food fun rent
40 40 20
food fun rent
2 1 1 I valori possono essere anche testo, ad esempio per raggruppare i nomi in base alla loro prima lettera:
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")
}Output:
a : ana, al
b : bo, bea
c : cy Un gruppo esiste solo quando gli appartiene almeno un valore, quindi controlla con %in% names() prima di leggere un gruppo che potrebbe essere vuoto:
by_cat <- split(c(5, 7), c("food", "food"))
print("rent" %in% names(by_cat))Output:
[1] FALSESfida
FacileCompleta category_totals(amounts, categories). Restituisci una riga per categoria in ordine alfabetico, food: 40 (2 items), con l’importo totale e il numero di importi in quella categoria.
Il codice fornito legge gli importi e le categorie come due righe separate da virgole della stessa lunghezza e stampa ogni riga restituita.
Provalo tu
category_totals <- function(amounts, categories) {
# Write your code here
character(0)
}
# Supplied input/output code: keep it as it is
input <- suppressWarnings(readLines(file("stdin")))
cat(category_totals(as.numeric(strsplit(input[1], ",")[[1]]), strsplit(input[2], ",")[[1]]), sep = "\n")
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Sottostringhe con substr()Formattazione con sprintf()Dividere e unireRicerca nelle stringheSostituzione del testoRipasso - Generatore di nomi utente4Matrici
Creazione di matriciIndicizzazione delle matriciRiepiloghi di righe e colonneOperazioni aritmetiche con le matriciRipasso - Schema dei posti a sedere10Flusso di controllo avanzato
La funzione switch()ifelse() vettorialerepeat e breakFunzioni ricorsiveRiepilogo - Classificatore di voti2Ricerche chiave-valore
Ricerche in vettori con nomiControllare le chiaviAggiungere e rimuovere chiaviIterare sui nomiRiepilogo - Sportello titoli5Progetto - Registro dei voti
Aggiungere studentiRegistrare i voti8Ordinamento e raggruppamento
Ordinare i vettoriOrdinare in base a una chiaveRaggruppare con split()Riepiloghi dei gruppiRipasso - Classifica3Insiemi e conteggio
Valori univociOperazioni sugli insiemiTest di appartenenzaConteggio con table()Riepilogo - Ospiti dell’evento6Le funzioni come valori
Funzioni anonimePassare funzioniRestituire funzioniClosure con statoRiepilogo - Regole di sconto9DataFrame
Creare DataFrameColonne e righeFiltrare le righeAggiungere e ordinareRiepilogo - Report delle vendite12Progetto - Gestione delle spese
Registrare le speseSpesa totaleEsercitati da solo: Compilatore R online