HOWTO · R

Trouver l'index d'un élément dans un vecteur R

Ce tutoriel montre comment trouver l'index d'un élément dans un vecteur R

Sur cette page

Utilisez which() pour obtenir toutes les positions où une condition est vraie. Utilisez match() pour trouver la première position de chaque valeur recherchée ; la fonction renvoie NA si aucune correspondance n’existe. Les positions dans un vecteur R commencent à 1. L’exemple ci-dessous compare les deux résultats à partir d’un même vecteur. Le code et les sorties affichées dans les exemples restent en anglais.

Trouver toutes les positions correspondantes avec which()

which() prend un vecteur logique en entrée et renvoie les positions de ses éléments TRUE. Comparer un vecteur à une valeur peut produire plusieurs correspondances si cette valeur apparaît plusieurs fois. Pour rechercher plusieurs valeurs, utilisez %in% afin de créer un vecteur logique indiquant les correspondances, puis transmettez-le à which().

Exécutez cet exemple pour trouver toutes les occurrences de 20, puis les positions contenant 10 ou 30 :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

x <- c(10, 20, 10, 30, 20)
which(x == 20)
which(x %in% c(10, 30))
[1] 2 5
[1] 1 3 4

Le premier résultat inclut les deux positions où apparaît 20 ; le second indique les positions dont la valeur est 10 ou 30. Ces positions commencent à 1, comme tous les indices de vecteurs en R.

%in% est un opérateur qui renvoie un résultat logique pour chaque élément du vecteur situé à sa gauche ; ce n’est pas un argument de which(). Vous pouvez aussi effectuer une recherche à l’aide d’une condition, par exemple x > 15 : créez ou transmettez cette expression logique à which() pour obtenir les positions qui la satisfont. Comme which() ne renvoie que les positions correspondant à TRUE, les valeurs logiques manquantes n’apparaissent pas dans le résultat.

Trouver la première position correspondante pour chaque valeur avec match()

Utilisez match(needles, haystack) pour trouver, dans haystack, la première position de chaque valeur de needles. L’ordre des arguments est important : indiquez d’abord les valeurs recherchées, puis le vecteur dans lequel effectuer la recherche. Les répétitions dans le vecteur parcouru ne produisent pas de positions répétées ; chaque valeur recherchée donne au plus un résultat. Par défaut, match() renvoie NA lorsqu’une valeur recherchée est absente.

À partir du vecteur x de la section précédente, cette expression trouve la première position de 20 et de 30, et indique qu’il n’y a aucune correspondance pour 40 :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

x <- c(10, 20, 10, 30, 20)
match(c(20, 30, 40), x)
[1]  2  4 NA

Les résultats correspondent, dans l’ordre, à 20, 30 et 40 : 20 apparaît pour la première fois à la position 2, 30 à la position 4, et 40 est absent ; son résultat est donc NA.

Choisissez la fonction selon le résultat souhaité : which(x == value) peut renvoyer toutes les positions correspondantes, tandis que match(value, x) ne renvoie que la première. Pour plusieurs valeurs recherchées, which(x %in% values) renvoie les positions dans le vecteur parcouru, alors que match(values, x) renvoie la première position correspondante pour chaque valeur recherchée, en conservant l’ordre de values. Aucune de ces fonctions ne modifie le vecteur. Si vous utilisez les positions pour extraire des éléments d’un autre vecteur, gardez à l’esprit qu’un résultat NA de match() indique une absence de correspondance ; vérifiez avec !is.na(position) avant de l’utiliser si vous souhaitez ignorer les valeurs manquantes. Les positions renvoyées se rapportent au vecteur parcouru : tenez compte de son ordre lorsque vous les appliquez à des données associées.