Bonjour,
J'étudie la néophobie chez des oiseaux. Je manipule un jeu de données temporel.
Pour un "area" (bois) et un "box" (nichoir) donné, chaque ligne donne une information sur un comportement, sa durée et son auteur.
La séquence d' événements pour chaque oiseau (i.e. pour chaque combinaison de "area"/ "box") est START ... AO.......AO.........END
"START" correspond au lancement de la vidéo et "END" à la fin. "AO" signifie que l'on change d'expérience au cours de la vidéo.
Voici un extrait de mon jeu de données "neo"
Mon jeu de données réel contient ce type de séquence N fois soit une séquence par combinaison de area/box.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 > neo area box date time timeinsec total.time identity behaviour 1 BS BS 25C 19/06/14 1 0 1 <NA> START 2 BS BS 25C 19/06/14 1 0 1 HB D1A1 3 BS BS 25C 19/06/14 2 12 2 <NA> AO 4 BS BS 25C 19/06/14 2 12 2 HB D2A1 5 BS BS 25C 19/06/14 3 23 3 <NA> DO 6 BS BS 25C 19/06/14 4 25 4 HB D1A2 7 BS BS 25C 19/06/14 5 29 5 HB F1A 8 BS BS 25C 19/06/14 11 3876 6 <NA> AO 9 BS BS 25C 19/06/14 12 3894 7 <NA> DO 10 BS BS 25C 19/06/14 13 5205 8 M DV 11 BS BS 25C 19/06/14 14 5207 9 M FV 12 BS BS 25C 19/06/14 15 5214 10 HB AP 13 BS BS 25C 19/06/14 6 7761 11 HB AP 14 BS BS 25C 19/06/14 7 7779 12 M P 15 BS BS 25C 19/06/14 8 7866 13 F S 16 BS BS 25C 19/06/14 9 7946 14 HB D1A1 17 BS BS 25C 19/06/14 10 7966 15 HB F1A 18 BS BS 25C 19/06/14 10 7966 15 <NA> END
Les séquences sont les unes à la suite des autres donc un "END" est toujours immédiatement suivi d'un "START".
Je voudrais que R me construise "status" un vecteur colonne dans lequel il inscrit "remove" lorsque nous nous trouvons à des lignes entre START et AO, puis "control" lorsque nous sommes entre 2 AO et enfin "fig" lorsque nous sommes entre le deuxième AO et END. Et répéter ceci pour chacune des séquences bien sûr.
J'ai essayé ceci:
Or il me renvoie le message d'erreur suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 status = NULL for (i in 1:nrow(neo)){ # pour tester toutes les lignes de mon jeu de données if(behaviour[i] == "START"){ j = i while(behaviour[j] != "AO"){ status[j] = "remove" j = j+1 } } if((behaviour[i] == "AO") & (status[i-1] == "remove")) { # expérience 1 j = i while(behaviour[j] != "AO"){ status[j] = "control" j = j+1 } } if((behaviour[i] == "AO") & (status[i-1] == "control")) { # expérience 2 j = i while(behaviour[j] != "END"){ status[j] = "fig" j = j+1 } } }
Error in while (behaviour[j] != "AO") { :
valeur manquante là où TRUE / FALSE est requis
Ou bien:
Error in if ((behaviour[i] == "AO") & (status[i - 1] == "remove")) { :
l'argument est de longueur nulle
Ce qui me fait penser qu'il n'enchaîne pas les boucles dans l'ordre suivant: for / 1er if/while/ 2ieme if/while/ 3ieme if /while /for etc...
De plus, "status" ne semble pas se remplir au fur et à mesure car il garde sa valeur NULL.
J'ai également tenté en remplaçant mes deux derniers if par else if mais cela ne fonctionne pas.
A la fin j'ajouterai la colonne "status" à la matrice "neo" avec neo=data.frame(neo, status).
J'ai également essayé en créant la colonne "status" (remplie de NA) dans ma matrice "neo" avant de lancer la boucle mais cela ne fonctionne pas davantage.
Pouvez-vous m'aider svp?
Hélène
Partager