Menu
Coddy logo textTech

Compter avec table()

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

table(x) compte combien de fois chaque valeur apparaît. Le résultat est nommé d’après les valeurs, triées par ordre alphabétique, donc le nombre d’occurrences d’une valeur est t[["value"]] :

votes <- c("tea", "coffee", "tea", "juice", "tea")
t <- table(votes)
print(t[["tea"]])
print(names(t))
print(as.vector(t))

Sortie :

[1] 3
[1] "coffee" "juice"  "tea"   
[1] 1 1 3

sort(t, decreasing = TRUE) classe les comptes du plus élevé au plus faible. which.max(t) donne la position du compte le plus élevé ; en cas d’égalité, il choisit le premier, c’est-à-dire la valeur qui vient en premier dans l’ordre alphabétique :

votes <- c("tea", "coffee", "tea", "juice", "coffee")
t <- table(votes)
print(names(t)[which.max(t)])
print(max(t))

Sortie :

[1] "coffee"
[1] 2

Une valeur qui ne se produit jamais ne figure pas du tout dans la table : vérifiez donc avec %in% names(t) avant de la lire :

t <- table(c("A", "B", "A"))
for (grade in c("A", "B", "C")) {
  n <- if (grade %in% names(t)) t[[grade]] else 0
  cat(grade, n, "\n")
}

Sortie :

A 2 
B 1 
C 0 

table() compte également les nombres et les valeurs logiques. Pour compter une seule valeur, sum(x == value) est plus court que de construire une table :

rolls <- c(6, 2, 6, 6, 1)
print(sum(rolls == 6))
print(table(rolls > 3)[["TRUE"]])

Sortie :

[1] 3
[1] 3
challenge icon

Défi

Facile

Complétez vote_winner(votes). Retournez l’option ayant obtenu le plus de votes, suivie de son nombre, comme dans tea (3 votes). En cas d’égalité entre les options, retournez celle qui vient en premier dans l’ordre alphabétique.

Le code fourni lit les votes sous forme de ligne séparée par des virgules et affiche la valeur retournée.

Essayez vous-même

vote_winner <- function(votes) {
  # Écrivez votre code ici
  ""
}

# Code d'entrée/sortie fourni : gardez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
cat(vote_winner(strsplit(input[1], ",")[[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