Bonjour à tous,
Débutante en R, je rencontre un problème auquel je ne trouve pas de réponse..
Mon problème est le suivant :
J'ai un data frame avec 3336 observations et 10 variables (voir ci-dessous). J'ai ordonné mon data_frame selon le n° de l'animal et aussi le jour à l'aide de la ligne de code suivante (en passant j'ai viré les cases où il n'y avait pas de valeur (NA)) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 FIO <- FIO[complete.cases(FIO$animal_number), ] FIO1 <- FIO [order(FIO[,1],decreasing=FALSE),]
Je souhaitais obtenir un poids moyen par animal et par jour, j'ai donc fait une aggrégation avec l'instruction suivante :
J'ai également calculé les variables x et y : x correspond à mean-2sd et y correspond à mean+2sd.
Code : Sélectionner tout - Visualiser dans une fenêtre à part mean_weight <- aggregate(weight ~day_visit_time+animal_number, data = FIO1, mean)
J'ai ainsi obtenu le data.frame suivant :
Ce nouveau dataframe agregé ne contient plus que 300 lignes contre 3338 pour le premier, les merger ou appliquer la fonction cbind() est donc impossible.
Je souhaiterais savoir si mon observation z (observation n°i, jour i, animal i) est comprise dans l'intervalle y/y de son groupe (c'est à dire même jour, même n°animal).
Pour cela, je vais utiliser la fonction ifelse tel que :
Petite particularité :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ifelse (weight <=x & weight>=y, weight, NA)
Le nombre d'observations par jour et par animal n'est pas fixé (cela peut être 10 comme cela peut être 3)
J'ai regardé au niveau des fonctions for et while (correspondance entre n°animal et jour) cela n'aboutit pas à grand chose..
N'hésitez pas à me poser des questions si vous avez des idées, des remarques, si je n'ai pas été clair etc..
Bonne journée,
Cordialement,
Tiphaine
Partager