80 votes

Sous-ensemble / filtrer les lignes dans un cadre de données en fonction d'une condition dans une colonne

Étant donné un data frame "foo", comment puis-je sélectionner uniquement les lignes de "foo" où par exemple foo$location = "there" ?

foo = data.frame(location = c("ici", "là", "ici", "là", "où"), x = 1:5, y = 6:10)
foo
#   location x  y
# 1     ici 1  6
# 2     là  2  7
# 3     ici 3  8
# 4     là  4  9
# 5     où  5 10

Résultat souhaité, "bar" :

#   location x y
# 2     là  2 7
# 4     là  4 9

141voto

JoFrhwld Points 4142

Voici les deux approches principales. Je préfère celle-ci pour sa lisibilité :

bar <- subset(foo, location == "there")

Notez que vous pouvez enchaîner de nombreuses conditionnelles avec & et | pour créer des sous-ensembles complexes.

La seconde est l'approche d'indexation. Vous pouvez indexer des lignes en R avec des tranches numériques ou booléennes. foo$location == "there" renvoie un vecteur de valeurs T et F de même longueur que les lignes de foo. Vous pouvez le faire pour ne renvoyer que les lignes pour lesquelles la condition est vraie.

foo[foo$location == "there", ]

6voto

DryLabRebel Points 4707

Juste pour étendre la réponse ci-dessus, vous pouvez également indexer vos colonnes plutôt que de spécifier les noms de colonnes, ce qui peut également être utile en fonction de ce que vous faites. Étant donné que votre emplacement est le premier champ, cela ressemblerait à ceci:

    bar <- foo[foo[ ,1] == "là-bas", ]

C'est utile car vous pouvez effectuer des opérations sur la valeur de votre colonne, comme boucler sur des colonnes spécifiques (et vous pouvez faire de même en indexant également les numéros de lignes).

C'est aussi utile si vous devez effectuer une opération sur plus d'une colonne car vous pouvez alors spécifier une plage de colonnes:

    foo[foo[ ,c(1:N)], ]

Ou des colonnes spécifiques, comme vous vous y attendriez.

    foo[foo[ ,c(1,5,9)], ]

2voto

Quinten Points 454

Une autre option pourrait être d'utiliser la fonction filter de dplyr. Voici un exemple reproductible :

foo = data.frame(location = c("ici", "là", "ici", "là", "où"), x = 1:5, y = 6:10)
library(dplyr)
filter(foo, location == "là")
#>   location x y
#> 1    là 2 7
#> 2    là 4 9

Créé le 2022-09-11 avec reprex v2.0.2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X