Menu
Coddy logo textTech

Filtrer les lignes

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

Un vecteur logique avec une valeur par ligne sélectionne les lignes où il vaut TRUE. Placez-le avant la virgule et laissez la partie des colonnes vide pour conserver toutes les colonnes :

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
print(people[people$age > 30, ])
print(nrow(people[people$age > 30, ]))

Sortie :

  name age   city
1  ada  36 london
3   cy  41   rome
[1] 2

Combinez les conditions avec & (les deux) et | (l’une ou l’autre). Chaque partie compare une colonne entière, donc le résultat contient toujours une valeur par ligne :

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
print(people[people$age > 30 & people$city == "london", ])
print(people$name[people$age < 25 | people$city == "rome"])

Résultat :

  name age   city
1  ada  36 london
[1] "bo" "cy"

subset(df, condition) fait la même chose avec un code plus court, car les noms de colonnes peuvent y être utilisés directement :

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
older <- subset(people, age > 30)
print(older$name)

Résultat :

[1] "ada" "cy" 

Lorsqu’aucune ligne ne correspond, le résultat est un bloc de données comportant 0 ligne. Vérifie donc nrow() avant d’y lire des données :

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
nobody <- people[people$age > 90, ]
print(nrow(nobody))
print(if (nrow(nobody) == 0) "none" else nobody$name[1])

Sortie :

[1] 0
[1] "none"
challenge icon

Défi

Facile

Complétez adults_in(df, city). df contient les colonnes name, age et city. Retournez les noms des personnes qui ont au moins 18 ans et vivent dans city, dans l’ordre des lignes et séparés par , , ou none.

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 correspond à une ligne, avec des valeurs séparées par des virgules. La dernière ligne d’entrée contient la ville, et le code affiche la valeur renvoyée.

Essayez vous-même

adults_in <- function(df, city) {
  # Écrivez votre code ici
  "none"
}

# Code d'entrée/sortie fourni : gardez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
cat(adults_in(df, input[length(input)]), 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