Bonjour,
Je dispose d'un data frame: "NO", pour lequel j'effectue une opération :
Je cherche donc à connaitre les valeurs positives de ma seconde colonne, à les mettre dans un objet, et à connaitre le contenu de la première colonne associée à la première valeur positive.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 AL <- which (NO[2] > 0) > ALstart <- NO[AL,2] > print(NO[[1]] [min(AL)]) [1] "2010-07-01 18:00:00"
Maintenant, j'aimerais effectuer cette même opération pour toutes les colonnes suivantes de mon data frame: NO[3:16] .
Pour information :
J'ai donc pensé faire une boucle mais j'ai quelques difficultés à la formuler.
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 > str(NO) 'data.frame': 3983 obs. of 16 variables: $ dates: POSIXlt, format: "2009-12-15 12:00:00" "2009-12-15 15:00:00" "2009-12-15 18:00:00" "2009-12-15 21:00:00" ... $ 0.3 : num -7.33 -7.78 -8 -8.41 -8.85 ... $ 0.5 : num -7.09 -7.4 -7.5 -7.66 -7.85 -8.09 -8.36 -8.61 -8.83 -8.99 ... $ 0.7 : num -7 -7.25 -7.28 -7.35 -7.44 -7.56 -7.7 -7.86 -8.02 -8.17 ... $ 0.9 : num -6.91 -7.13 -7.15 -7.18 -7.23 -7.28 -7.35 -7.44 -7.53 -7.63 ... $ 1.1 : num -6.82 -7.05 -7.09 -7.09 -7.12 -7.15 -7.18 -7.23 -7.28 -7.35 ... $ 1.4 : num -6.77 -7.01 -7.04 -7.04 -7.05 -7.08 -7.09 -7.11 -7.14 -7.17 ... $ 1.7 : num -6.74 -6.98 -6.97 -7 -7.01 -7.01 -7.04 -7.05 -7.07 -7.08 ... $ 2 : num -6.78 -7.05 -7.05 -7.06 -7.08 -7.08 -7.11 -7.12 -7.15 -7.15 ... $ 2.5 : num -6.61 -6.91 -6.91 -6.95 -6.97 -7.01 -7.02 -7.05 -7.08 -7.14 ... $ 3 : num -5.69 -5.92 -5.92 -5.92 -5.92 -5.95 -5.95 -5.95 -5.97 -5.99 ... $ 4 : num -4.75 -4.91 -4.9 -4.91 -4.94 -4.94 -4.94 -4.94 -4.94 -4.94 ... $ 5 : num -4.15 -4.32 -4.32 -4.32 -4.32 -4.32 -4.32 -4.32 -4.34 -4.35 ... $ 7 : num -3.78 -3.91 -3.91 -3.91 -3.91 -3.91 -3.91 -3.91 -3.91 -3.91 ... $ 9 : num -3.93 -4.02 -4.02 -4.02 -4.02 -4.02 -4.02 -4.02 -4.02 -4.02 ... $ 10 : num -4 -4.12 -4.12 -4.11 -4.11 -4.11 -4.11 -4.11 -4.11 -4.12 ... >
J'ai essayé avec "if", dans l'idée que si ma ligne est négative je passe à la suivante, sinon je m'arrête (utilisation de "stop()???) et je crée mon objet contenant mes valeurs positives. Mais cela ne semble pas fonctionner :
Ensuite, cette boucle ne teste que les valeurs de la seconde colonne, or j'aimerais que, quand celles-ci sont testées, les valeurs positives trouvées et la valeur associée à la première est donnée, passer à la colonne suivante et faire la même chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 i <- 2 if(NO[i,2] > 0){ AL <- which (NO[2] > 0) ALstart <- NO[AL,2] print(NO[[1]] [min(AL)]) }else{ i <- i+1 }
J'ai essayé "apply", mais je l'utilise mal.
Ou alors "for" ou "while" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 i <- 2 j <- 2 while(j < 16){ # 16: nb colonnes while(i < 1389){ # 1389 nb lignes if(NO[i,j]<0){ ....
J'imagine que plusieurs solutions sont envisageables, le problème est de correctement remplir ces fonctions pour qu'elles fonctionnent...
Pourriez-vous donc m'aider à convertir le premier code en boucle, qui pour chaque colonne de mon data frame (à partir de la seconde), crée un objet contenant les valeurs positives, et me donne la valeur de la première colonne de la première de celle-ci??
Merci pour une aide éventuelle :-)
Partager