Menu
Coddy logo textTech

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"
challenge icon

Sfida

Facile

Completa 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")
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore R online