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] 2Combinez 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"Défi
FacileComplé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")
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