Indexation logique
Fait partie de la section Fondamentaux du Journey R de Coddy — leçon 68 sur 78.
Au lieu de spécifier des positions exactes, vous pouvez utiliser un vecteur logique pour sélectionner des éléments. Cette technique, appelée indexation logique, vous permet de filtrer un vecteur en fonction de conditions plutôt que de positions.
Lorsque vous appliquez une comparaison à un vecteur, R renvoie un vecteur logique de la même longueur :
numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)Sortie :
[1] FALSE FALSE TRUE TRUE TRUEVous pouvez utiliser ce vecteur logique directement à l'intérieur de crochets pour extraire les éléments correspondants :
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])Sortie :
[1] 30 40 50R ne conserve que les éléments pour lesquels le vecteur logique est TRUE. Cette approche est bien plus propre que l'écriture de boucles pour filtrer les données. Vous pouvez combiner des conditions en utilisant des opérateurs logiques :
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])Résultat :
[1] 20 30 40L'indexation logique est l'une des fonctionnalités les plus puissantes de R pour la manipulation de données, vous permettant de filtrer des ensembles de données avec des expressions simples et lisibles.
Défi
FacileVous recevrez deux lignes d'entrée :
- Une liste de nombres séparés par des virgules (par exemple,
15,42,8,67,23,91,34,12,56) - Deux valeurs de seuil séparées par une virgule représentant une plage (par exemple,
20,60)
En utilisant l'indexation logique :
- Créez un vecteur numérique à partir des nombres séparés par des virgules
- Extrayez et affichez tous les éléments qui sont inférieurs au premier seuil (borne inférieure)
- Extrayez et affichez tous les éléments qui sont supérieurs au second seuil (borne supérieure)
- Extrayez et affichez tous les éléments qui sont dans la plage (supérieurs ou égaux au premier seuil ET inférieurs ou égaux au second seuil)
Par exemple, si les entrées sont :
5,25,10,45,60,15,80,35,50
20,50La sortie devrait être :
[1] 5 10 15
[1] 60 80
[1] 25 45 35 50Explication :
- Éléments inférieurs à 20 : 5, 10, 15
- Éléments supérieurs à 50 : 60, 80
- Éléments entre 20 et 50 (inclus) : 25, 45, 35, 50
Utilisez l'opérateur & pour combiner les conditions pour le filtre de plage.
Aide-mémoire
L'indexation logique vous permet de filtrer un vecteur en fonction de conditions plutôt que de positions. Lorsque vous appliquez une comparaison à un vecteur, R renvoie un vecteur logique :
numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)
# Output: [1] FALSE FALSE TRUE TRUE TRUEUtilisez le vecteur logique à l'intérieur de crochets pour extraire les éléments correspondants :
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])
# Output: [1] 30 40 50Combinez des conditions en utilisant des opérateurs logiques comme & (ET) :
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])
# Output: [1] 20 30 40Essayez vous-même
# Lire l'entrée
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Analyser les nombres séparés par des virgules dans un vecteur numérique
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))
# Analyser les valeurs de seuil
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]
# TODO: Écrivez votre code ci-dessous
# 1. Utiliser l'indexation logique pour extraire les éléments inférieurs à lower_bound et les afficher
# 2. Utiliser l'indexation logique pour extraire les éléments supérieurs à upper_bound et les afficher
# 3. Utiliser l'indexation logique avec l'opérateur & pour extraire les éléments dans la plage (inclusif) et les afficherCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
4Opérateurs - Partie 2
Opérateurs logiques (AND, OR)Opérateurs logiques - Partie 2 (NOT)Récapitulatif - Logique simpleLogique vectorisée - Partie 1Logique vectorisée - Partie 27Calculateur de partage d'addition
Message de bienvenueRécupérer la saisie utilisateur10FizzBuzz avec une variante
Présentation du jeuLa fonction FizzBuzz13Vecteurs avancés
Découpage et indexation de vecteursIndexation logiqueArithmétique des vecteurs et recyclageL'opérateur %in%2Variables et types de données
Type de données numériqueType de données entierType de données caractèreType de données logiqueVérification des types de donnéesConventions de nommageValeurs manquantes : NARécapitulatif - Création de variables8Boucles
Boucle ForBoucle WhileBreakSuivant (Continue)Récapitulatif - FactorielleGénération de séquences (seq, :)Boucles imbriquéesRécapitulatif - Saisie dynamique3Opérateurs, partie 1
Opérateurs arithmétiquesDivision entière et moduloOpérateurs d'affectationRécapitulatif - Mathématiques simplesOpérateurs de comparaison6Entrées/Sorties de base
Affichage avec PrintCat pour l'affichageAffichage avec des variablesLire l'entrée avec readline()Bases de la conversion de typesRécapitulatif - Calculateur d'âgeRécapitulatif - Vrai ou Faux9Fonctions
Déclarer une fonctionArguments de fonctionValeurs de retourRécapitulatif - Fonction SigmaRécapitulatif - Fonction de validationValeurs de paramètres par défaut