Menu
Coddy logo textTech

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.0

df[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.0

Une 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   2
challenge icon

Défi

Facile

Complé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")
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