Attribution valeur par ind si une des obs répond à une condition

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

July Elsa
Messages : 6
Enregistré le : 20 Juin 2023, 18:34

Attribution valeur par ind si une des obs répond à une condition

Messagepar July Elsa » 03 Mai 2024, 20:15

Bonjour à tous,

J'ai un df ("SYLATR") de données type CMR, présentant donc des données de captures (ou observations) pour plusieurs individus, avec de nombreuses colonnes différentes. J'ai de nombreuses lignes qui présentent plusieurs observations pour un même individu (identifié par un numéro unique de bague "BAGUE").

Grâce à "ifelse", j'ai créé une colonne indiquant un statut ("STATUT"), soit "RESIDENT" soit "INCONNU", par ligne (observation), en fonction de différentes conditions :

Code : Tout sélectionner

SYLATR$STATUT<-ifelse(SYLATR$PC==1|SYLATR$PI==1|SYLATR$MU=="J"|SYLATR$MU=="R"|SYLATR$SEXE=="?", "RESIDENT", "INCONNU")


Cependant, un individu peut répondre au(x) critère(s) de RESIDENT une fois et ne pas y répondre à d'autres observations, comme ci-dessous :
table(SYLATR$BAGUE, SYLATR$STATUT)
INCONNU RESIDENT
...
7129575 2 1

Sauf que j'aimerai qu'à partir du moment où un individu est considéré comme "RESIDENT" une fois, où que ce soit dans le df (donc sans prendre en compte l'ordre du jeu de données créé par la date de l'observation), le statut devienne systématiquement RESIDENT pour toutes les observations de cet individu.
Autrement dit, j'aimerai que :
Dans SYLATR$STATUT, si une fois STATUT =="RESIDENT" pour une BAGUE "X", alors STATUT devienne "RESIDENT" pour toutes les observations relatives à cette même bague X.

En espérant avoir été assez claire et vous remerciant d'avance,

Elsa

Maxime Deniaux
Messages : 72
Enregistré le : 11 Fév 2022, 22:49
Contact :

Re: Attribution valeur par ind si une des obs répond à une condition

Messagepar Maxime Deniaux » 04 Mai 2024, 10:00

Bonjour,

comme tu n'as pas fourni d'exemple reproductible, je m'en suis fabriqué un mais peut-être qu'il n'est pas bon par rapport à ce que tu as.

Je te propose ça comme solution :

Code : Tout sélectionner


SYLATR <- data.frame(BAGUE   = sample(1:30,50,T),
                               PC   = sample(0:5,50,T),
                               PI   = sample(0:5,50,T),
                               MU   = sample(c('J','autre','autrebis'),50,T),
                               SEXE = sample(c('?','autre','autrebis'),50,T)
                               )

SYLATR$STATUT <- ifelse(SYLATR$PC==1|SYLATR$PI==1|SYLATR$MU=="J"|SYLATR$MU=="R"|SYLATR$SEXE=="?", "RESIDENT", "INCONNU")

table(SYLATR$BAGUE, SYLATR$STATUT)

SYLATR2 <- SYLATR %>% group_by(BAGUE) %>% mutate(STATUT = case_when(length(which(STATUT == "RESIDENT")) != 0 ~ "RESIDENT",
                                                                                                   T ~ STATUT
                                                                                                    )
                                                                        )
table(SYLATR2$BAGUE, SYLATR2$STATUT)



Je reprends ton ifelse initial, et je l'utilise en groupant par BAGUE. S'il y a au moins 1 RESIDENT, alors tout devient RESIDENT pour cette BAGUE, sinon je laisse tel quel.

Est-ce que c'est ce que tu voulais ?
Surtout est-ce que ça fonctionne de ton côté, puisque comme dit plus haut, j'ai du créer un exemple moi-même. Et puis j'ai fait cela rapidement donc j'ai l'impression que ça fonctionne mais je n'ai pas regardé plus que ça.

Bonne fin de journée

July Elsa
Messages : 6
Enregistré le : 20 Juin 2023, 18:34

Re: Attribution valeur par ind si une des obs répond à une condition

Messagepar July Elsa » 04 Mai 2024, 10:42

Bonjour Maxime,

Désolée de ne pas avoir fourni un exemple reproductible..
Mais ton code marche parfaitement (j'ai comparé les deux tables pour quelques bagues et ça fait exactement ce que je voulais) !

Merci infiniment et bonne journée,
Elsa

Maxime Deniaux
Messages : 72
Enregistré le : 11 Fév 2022, 22:49
Contact :

Re: Attribution valeur par ind si une des obs répond à une condition

Messagepar Maxime Deniaux » 04 Mai 2024, 16:46

Bonjour,

il y a aucun problème, c'est juste que ça fait souvent perdre du temps (aux 2 parties), puisque ça ne facilite pas la tâche de la personne qui peut/veut aider.
Et pour le coup tu n'es pas la seule, il y a beaucoup de questions ici où on n'a pas d'exemple reproductible (même avec des données fictives) dans le post initial. Peut-être même que c'était mon cas au départ. C'est une habitude à prendre.

Bah super si ça marche.

Bonne fin de week-end


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité