HOWTO · R

Trouver le numéro de ligne dans R

Ce tutoriel montre comment trouver un numéro de ligne pour une valeur dans R.

Sur cette page

Utilisez which() pour trouver la position de chaque ligne qui satisfait une condition, ou match() pour trouver la première position de chaque valeur recherchée. Par exemple, which(staff$role == "Senior Dev") renvoie la position de chaque ligne correspondante dans staff. Si aucune ligne ne satisfait la condition, which() renvoie integer(0). Avec match(), une valeur recherchée absente renvoie NA.

Ces positions correspondent aux numéros des lignes lorsque le test logique ou le vecteur de recherche suit l’ordre des lignes du data frame. Dans les data frames R ordinaires, les positions commencent à 1. Si vous avez besoin du libellé de la ligne, comparez les valeurs renvoyées par rownames(data) ou recherchez-le avec match().

Trouver les numéros de ligne avec which()

which() prend un vecteur logique et renvoie les positions de ses valeurs TRUE. Une comparaison avec une colonne d’un data frame crée ce vecteur logique ; les positions renvoyées identifient donc les lignes dans le même ordre que le data frame. La fonction renvoie toutes les correspondances : elle convient ainsi aux conditions susceptibles de sélectionner plusieurs lignes.

Dans l’exemple, la valeur de rôle « Senior Dev » reste en anglais dans le bloc de code conservé tel quel.

Exécutez cet exemple :

staff <- data.frame(
  name = c("Ari", "Bea", "Chen", "Devi"),
  role = c("Analyst", "Senior Dev", "Senior Dev", "Manager")
)
which(staff$role == "Senior Dev")

Le résultat contient les positions 2 et 3, car ces deux lignes ont ce rôle. Pour trouver des lignes à l’aide d’une condition numérique ou composée, modifiez l’expression logique. Par exemple, which(grades$Math > 80) sélectionne chaque ligne dont la valeur de Math dépasse 80. Tenez compte de l’ordre des lignes du data frame si vous utilisez ensuite ces positions pour extraire des éléments d’un autre objet.

Pour rechercher des lignes à partir de noms personnalisés, comparez les libellés renvoyés par rownames() :

people <- data.frame(name = c("Ari", "Bea", "Chen"))
rownames(people) <- c("north", "central", "south")
which(rownames(people) == "central")

Cela renvoie la position de la ligne dont le libellé est central ; le libellé lui-même n’est pas le numéro de ligne. Si vous disposez déjà d’un vecteur aligné une à une sur les lignes, which(values == target) fonctionne de la même manière. Pour un vecteur autonome, parlez de position ; il ne s’agit d’un numéro de ligne que si ce vecteur représente les lignes du data frame.

Si la comparaison contient des valeurs manquantes, which() ne renvoie pas leurs positions. Si vous devez traiter ces valeurs comme une condition, gérez-les explicitement dans l’expression logique avant d’appeler which().

Trouver la première position d’une valeur avec match()

Utilisez match(query, table) pour obtenir la première position d’une valeur dans un vecteur, une colonne ou un vecteur de noms de lignes. query peut contenir une ou plusieurs valeurs ; le résultat comporte une position par valeur recherchée. Contrairement à which(), match() ne renvoie que la première occurrence pour chaque valeur recherchée. Par défaut, une valeur absente de table renvoie NA.

Pour une colonne de data frame, indiquez d’abord la valeur recherchée, puis la colonne :

staff <- data.frame(
  role = c("Analyst", "Senior Dev", "Senior Dev", "Manager")
)
match("Senior Dev", staff$role)

La position renvoyée est 2, celle de la première ligne correspondante, même si la valeur apparaît de nouveau plus loin. La même forme fonctionne avec les vecteurs : match(78, grades) trouve la première position de 78. Utilisez match("central", rownames(people)) pour obtenir la position correspondant à un nom de ligne.

Passez plusieurs valeurs recherchées sous forme de vecteur pour obtenir une position pour chacune :

grades <- c(88, 90, 75, 94, 80)
match(c(75, 94, 70), grades)

Le résultat donne les positions de 75 et 94, puis NA pour 70. Les positions suivent l’ordre des valeurs recherchées, et non celui de la table. Si la table contient des doublons, chaque recherche renvoie toujours la première occurrence. Lorsqu’une valeur recherchée est absente, vérifiez la présence de NA avant d’utiliser la position pour extraire des éléments d’un autre objet.

Conclusion

Choisissez which() lorsqu’une condition peut correspondre à plusieurs lignes et que vous avez besoin de toutes les positions ; la fonction renvoie integer(0) si aucune ligne ne correspond. Choisissez match() lorsque vous recherchez une ou plusieurs valeurs et que vous voulez leur première position ; la fonction renvoie NA pour une valeur absente. Avec l’une ou l’autre fonction, les positions correspondent aux lignes du data frame uniquement si le vecteur recherché respecte le même ordre. Utilisez rownames() lorsque vous avez besoin du libellé de la ligne plutôt que de sa position.