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"
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
Mon jeu de données réel contient ce type de séquence N fois soit une séquence par combinaison de area/box.
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:
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
        }
    }
}
Or il me renvoie le message d'erreur suivant:

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