Comment appliquer des regles conditionnelles sur un data frame avec R ?

La fonction permettant d’appliquer des regles conditionnelles est which(). Cette fonction s’applique sur des vecteurs, donc également sur des elements du dataframe de type vecteur (noms des colonnes ou valeurs des colonnes par exemple).

Cette fonction va appliquer la règle conditionnelle sur le vecteur précisé et va renvoyer dans un vecteur les index qui correspondent à cette condition (si la 2eme valeur du vecteur correspond à la condition, alors « 2 » sera dans le vecteur des resultats, etc, etc). Cela est donc utile pour travailler avec les index (quand ils ne sont pas connus à l’avance).

Par exemple, si on doit traiter un fichier qu’on recoit regulierement et qui contient une colonne « Note ». Mais l’emplacement de cette colonne peut changer (il est possible qu’avec le temps, son emplacement soit décalé). Alors pour identifier l’index de la colonne « Note », on peut utiliser cette fonction which() :

data <- data.frame( nom=c("a","b","c","a","b","c"), note=c(0,1,2,3,4,5))
index_colonne <- which( colnames(data) == "note")

Ainsi, on peut travailler avec le bon index sans que cela génère des erreurs (si la colonne changera d’emplacement).

Concernant les règles conditionnelles, il est possible de combiner des intersections de conditions (AND) :

#Exemple pour connaitre les index des lignes qui ont une note supérieure à 2 et inférieure à 5
which( data[,index_colonne]>2 & data[,index_colonne]<5)

Et il est egalement possible des combiner des unions de conditions (OR) :

#Exemple pour connaitre les index de lignes qui soit la note 0 ou la note 5
which( data[,index_colonne] == 0 | data[,index_colonne] == 5)

L’intérêt de récupérer des index de lignes est de pouvoir travailler avec. Mais cela permet aussi de pouvoir faire un decompte pour connaitre le nombre de lignes concernées :

which( data[,index_colonne] == 0 | data[,index_colonne] == 5) %>% length()

Pour + d’infos :

https://www.datasciencemadesimple.com/which-function-in-r/

0.00 avg. rating (0% score) - 0 votes

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *