je dispose d'un jeu de données incluant (entre autres) une colonne avec des noms d'espèces, et des colonnes de mesures biométriques (longueur, masse etc) comme suit :
Code : Tout sélectionner
dataset <- structure(list(SP = structure(1:10, .Label = c("A", "C", "C", "B", "A", "A", "C", "B", "C", "A"), class = "factor"),
LENGTH = c(73.5, 17.6, 17.0, 30.9, 77.4, 76.0, 17.2, 32.2, 17.1, 74.4),
MASS = c(20.1, 5.4, 5.3, 10.2, 21.0, 21.2, 4.4, 30.0, 5.6, 19.9)),
.Names = c("SP", "LENGTH", "MASS"), row.names = c(NA,-10L), class = c("tbl_df", "tbl", "data.frame"))
Afin d'automatiser la vérification de la saisie, je souhaite faire une recherche automatique des valeurs aberrantes, en me basant sur les min et max de la longeur et de la masse pour chaque espèce.
Je suis capable de le faire avec des boucles "for()" et "if()", mais commençant à m'initier au data wrangling, je suis sûre qu'il existe un moyen bien plus clean, rapide et efficace pour réaliser cela (le tableau total comportant plusieurs centaines de milliers de lignes).
Je pensais d'abord charger un tableau comportant pour chaque espèce les min et max de longueur et masse, par exemple :
Code : Tout sélectionner
biometrie <- structure(list(SP = structure(1:3, .Label = c("A", "B", "C"), class = "factor"),
MinLength = c(74.2, 30.1, 16.5),
MaxLength = c(78.3, 35.1, 18.3),
MinMass = c(19.3, 9.8, 4.0),
MaxMass = c(22.1, 12.6, 5.6)),
.Names = c("SP", "MinLength", "MaxLength", "MinMass", "MaxMass"), row.names = c(NA,-3L), class = c("tbl_df", "tbl", "data.frame"))
Ainsi, il faudrait que pour chaque ligne, en fonction de l'espèce concernée, les cellules contenant des valeurs aberrantes (ici, en l'occurance, une longeur de 73.5 pour l'espèce A et une masse de 30.0 pour l'espèce B) apparaissent/soient stockées dans un fichier, ce qui permettrait ainsi d'aller modifier le fichier de base (voire peut-être même pourrait-on corriger directement sur le tbl?)
J'imagine qu'il faut utiliser des fonctions de comparaison, mais après plusieurs jours à me creuser les méninges, je sèche vraiment !
Merci grandement pour votre aide,
LV