Menu
Coddy logo textTech

Synthèses des groupes

Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 40 sur 64.

tapply(values, groups, f) regroupe les valeurs et applique f à chaque groupe en un seul appel. Cela donne le même résultat que 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))

Sortie :

food  fun rent 
  40   40   20 
food  fun rent 
  30   40   20 

Le résultat est nommé par groupe dans l’ordre trié, donc [[ ]] lit un groupe et names() les répertorie :

amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
avg <- tapply(amounts, category, mean)
print(avg[["food"]])
print(names(avg))

Sortie :

[1] 20
[1] "food" "fun"  "rent"

La fonction de résumé peut être la vôtre. Ici, elle compte les commandes supérieures à 25 dans chaque groupe :

amounts <- c(10, 20, 30, 40)
category <- c("food", "rent", "food", "fun")
print(tapply(amounts, category, function(v) sum(v > 25)))

Résultat :

food  fun rent 
   1    1    0 

Le résultat est un vecteur nommé, donc sort() et which.max() trouvent le groupe ayant la plus grande valeur. which.max() renvoie la première valeur parmi les valeurs égales :

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)))

Résultat :

[1] "food"
[1] "food" "fun"  "rent"
challenge icon

Défi

Facile

Complétez city_report(cities, temps). Renvoyez une ligne par ville dans l’ordre alphabétique, oslo: avg 4.5, max 9, avec la température moyenne arrondie à une décimale et la température maximale. Ajoutez ensuite Warmest: suivi de la ville ayant la moyenne la plus élevée (la première dans l’ordre alphabétique en cas d’égalité des moyennes).

Le code fourni lit les villes et les températures sous forme de deux lignes séparées par des virgules et de même longueur, puis affiche chaque ligne renvoyée.

Essayez vous-même

city_report <- function(cities, temps) {
  # Écrivez votre code ici
  character(0)
}

# Code d'entrée/sortie fourni : gardez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
cat(city_report(strsplit(input[1], ",")[[1]], as.numeric(strsplit(input[2], ",")[[1]])), sep = "\n")
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et flux d’exécution

Entraînez-vous par vous-même : Compilateur R en ligne