Bonjour,
Je dispose d'un data frame: "NO", pour lequel j'effectue une opération :

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"
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.
Maintenant, j'aimerais effectuer cette même opération pour toutes les colonnes suivantes de mon data frame: NO[3:16] .
Pour information :
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 donc pensé faire une boucle mais j'ai quelques difficultés à la formuler.
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 :

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
			}
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.

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 :-)