Riepiloghi dei gruppi
Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 40 di 64.
tapply(values, groups, f) raggruppa i valori e applica f a ogni gruppo in una sola chiamata. Restituisce lo stesso risultato di 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))Output:
food fun rent
40 40 20
food fun rent
30 40 20 Il risultato è denominato per gruppo in ordine ordinato, quindi [[ ]] legge un gruppo e names() li elenca:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
avg <- tapply(amounts, category, mean)
print(avg[["food"]])
print(names(avg))Output:
[1] 20
[1] "food" "fun" "rent"La funzione di riepilogo può essere definita da te. Qui conta gli ordini superiori a 25 in ciascun gruppo:
amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
print(tapply(amounts, category, function(v) sum(v > 25)))Output:
food fun rent
1 1 0 Il risultato è un vettore con nomi, quindi sort() e which.max() trovano il gruppo più grande. which.max() restituisce il primo tra i valori uguali:
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)))Output:
[1] "food"
[1] "food" "fun" "rent"Sfida
FacileCompleta city_report(cities, temps). Restituisci una riga per città in ordine alfabetico, oslo: avg 4.5, max 9, con la temperatura media arrotondata a una cifra decimale e la temperatura massima. Poi aggiungi Warmest: seguito dalla città con la media più alta (la prima in ordine alfabetico in caso di parità tra le medie).
Il codice fornito legge le città e le temperature da due righe separate da virgole della stessa lunghezza e stampa ogni riga restituita.
Provalo tu
city_report <- function(cities, temps) {
# Write your code here
character(0)
}
# Supplied input/output code: keep it as it is
input <- suppressWarnings(readLines(file("stdin")))
cat(city_report(strsplit(input[1], ",")[[1]], as.numeric(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