Ajouter et trier
Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 45 sur 64.
Attribuer un nouveau nom de colonne ajoute la colonne. Les opérations arithmétiques entre les colonnes s’effectuent ligne par ligne, comme toute opération arithmétique sur des vecteurs :
orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders)Sortie :
item qty price total
1 tea 2 4.0 8.0
2 jam 5 2.5 12.5
3 oil 1 9.0 9.0df[order(df$col), ] trie les lignes selon une colonne. Les numéros de ligne à gauche restent associés aux lignes d’origine. Utilisez un signe moins ou decreasing = TRUE pour trier du plus grand au plus petit, ainsi qu’une seconde clé en cas d’égalité :
orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders[order(-orders$total, orders$item), c("item", "total")])Résultat :
item total
2 jam 12.5
3 oil 9.0
1 tea 8.0Une nouvelle colonne peut être du texte construit à partir d’autres colonnes. sprintf() fonctionne sur des colonnes entières à la fois :
orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5), price = c(4, 2.5))
orders$label <- sprintf("%d x %s", orders$qty, orders$item)
print(orders$label)Sortie :
[1] "2 x tea" "5 x jam"rbind() ajoute une ligne provenant d’un dataframe à une ligne avec les mêmes colonnes, et head(df, n) conserve les n premières lignes :
orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5))
orders <- rbind(orders, data.frame(item = "oil", qty = 1))
print(nrow(orders))
print(head(orders[order(-orders$qty), ], 2))Sortie :
[1] 3
item qty
2 jam 5
1 tea 2Défi
FacileComplétez order_totals(df). df possède les colonnes item, qty et price. Ajoutez une colonne total (quantité multipliée par le prix), triez les lignes par total décroissant (les articles ayant des totaux égaux sont classés par ordre alphabétique) et renvoyez une ligne par ligne, jam: 12.50, avec le total affiché avec deux décimales.
Le code fourni lit le tableau depuis l’entrée avec read.csv(text = input) : la première ligne contient les noms des colonnes et chaque ligne suivante constitue une ligne, avec des valeurs séparées par des virgules. Le code affiche chaque ligne renvoyée.
Essayez vous-même
order_totals <- function(df) {
# Écrivez votre code ici
character(0)
}
# Code d'entrée/sortie fourni : gardez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input)
cat(order_totals(df), 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 notes3Ensembles 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