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"Défi
FacileComplé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")
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
1Les chaînes en profondeur
Sous-chaînes avec substr()Mise en forme avec sprintf()Scinder et joindreRechercher dans les chaînesRemplacer du texteRécapitulatif - Créateur de nom d'utilisateur4Matrices
Créer des matricesIndexer des matricesRécapitulatifs des lignes et des colonnesArithmétique matricielleRécapitulatif - Plan de salle7La famille Apply
lapply et sapplyMap et mapplyFilter et FindReduceRécapitulatif - Pipeline de données10Structures de contrôle avancées
La fonction switch()ifelse() vectorisérepeat et breakFonctions récursivesRécapitulatif – Classificateur de notes2Recherches par clé-valeur
Recherches dans des vecteurs nommésVérifier les clésAjouter et supprimer des clésParcourir les nomsRécapitulatif - Bureau des stocks5Projet - Carnet de notes
Ajouter des élèvesEnregistrer les notes8Trier et regrouper
Trier des vecteursTrier selon une cléRegrouper avec split()Synthèses des groupesRécapitulatif - Classement3Ensembles et comptage
Valeurs uniquesOpérations sur les ensemblesTests d’appartenanceCompter avec table()Récapitulatif - Invités à l’événement6Les fonctions comme valeurs
Fonctions anonymesPasser des fonctionsRetourner des fonctionsFermetures avec étatRécapitulatif - Règles de remise9Data Frames
Créer des Data FramesColonnes et lignesFiltrer les lignesAjouter et trierRécapitulatif - Rapport des ventes12Projet - Suivi des dépenses
Enregistrer les dépensesDépenses totalesEntraînez-vous par vous-même : Compilateur R en ligne