Bonjour à tous,
Fraîchement arrivé sur R, je suis confronté à un problème. Je vais être le plus synthétique possible.
Je dispose de 2 jeux de données :
  • "France" données journalières (1 valeur / jour) . 1ère colonne : %d/%m/%y (de 2002 à 2017) 2ème colonne : données flottantes
  • "Russie" données horaires (1 valeur / h ). 1ère colonne : %d/%m/%y %H:%M (de 2002 à 2007) 2ème colonne : données flottantes

Je dois trouver le nombre de créneau respectant simultanément les critères suivants :
  • "France" supérieur à 1200 en gradient positif (valeur 1 < valeur 2 .. < valeur n) sur 3 jours OU supérieur à 1800 à minima un jour sur les 3 jours;
  • "Russie" comprises entre 400 et 1100 entre l'heure 1 et l'heure 10 (t+1h à t+10h).

Au vue du nombre de données j'y vais à petits pas. J'ai en premier temps supprimer les bornes de valeurs pour la France et la Russie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Russie <-subset(Russie, Russie[,2]>400 & Russie[,2]<1100) #exemple pour les données de la Russie
Ensuite je supprime les valeurs qui ne sont pas consécutives temporellement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
Russie$dtp = 1 # différence de temps de l'heure h - (h-1)
Russie$dtn = 1 # différence de temps de l'heure (h+1) - h
for (i in 2:length(Russief[,1])) {
 Russie[i,3] = Russie[i,1] - Russie[i-1,1]
}
for (i in 1:((length(Russie[,1])-1))){
  Russie[i,4] = Russie[i+1,1]-Russie[i,1]
}
Russieff <- Russie[-which (Russie[,3] != 1 & Russie[,4] !=1),] # On ne sélectionne que les valeurs consécutives

Mon problème
: je dois maintenant ne garder que les intervalles de valeurs qui se suivent de t+1h à t+10h. Dans l'idée je souhaite effectuer quelque chose comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
toto <- []
for (i in 1:(length(Russieff[,1])-10)){
toto[i] <- subset(Russieff, as.numeric(difftime(Russieff[i+10,1],(Russieff[i,1])))==10)
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 #ou alors faire une somme jusqu'à 10 ? 
for (i in 1:(length(Russieff[,1])-10)){
toto[i] <- subset(Russieff, (sum(Russieff[i:(i+10),4])==10)
Malheureusement je n'arrive pas à sauvegarder la matrice toto. De plus je vais avoir énormément de doublons crées dans cette boucle ....
Si vous avez des pistes, des idées ..
Je suis preneur !
Questions subsidiaires mais pour vérifier les conditions sur les deux matrices à la fin, je peux utiliser le %in% ?
Merci d'avance,
Bonne journée.