Occurrence sur un laps de temps

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Pierre Nunes
Messages : 2
Enregistré le : 17 Mai 2017, 08:06

Occurrence sur un laps de temps

Messagepar Pierre Nunes » 18 Mai 2017, 07:17

Bonjour à tous,
Débutant sous R (comme la majorité des personnes sur le forum je suppose) je sollicite votre aide.
Commençons par décrire les données dont je dispose : 3 fichiers .cvs :
    1- "France " valeurs journalières. 2 colonnes : 1ère colonne date journalière au format %d/%m/%Y ; 2 ème colonne : valeurs numériques flottantes;
    2- "Russie" valeurs horaires. 2 colonnes: 1ère colonne date horaire au format %d/%m/%Y %H:%M; 2 ème colonne : valeurs numériques flottantes;
    3- "Belgique" valeurs horaires. 2 colonnes: 1ère colonne date horaire au format %d/%m/%Y %H:%M; 2 ème colonne : valeurs numériques flottantes;
Je dois compter l’occurrence d'un phénomène qui doit vérifier simultanément les conditions suivantes :
    1 - Pour la France : supérieur à 1800 du jour 1 au jour 3 OU supérieur à 1200 en gradient positif (valeur jour 1 < valeur jour 2 ...) sur 3 jours
    2 - Pour la Russie : inférieur à 200 de t + 1 heure à t + 6 heures
    3- Pour la Belgique : comprise entre 400 et 1100 de t + 1 heure à t + 10 heures
J'espère avoir précis.
Je ne bloque que sur certains points. En effet concernant l'aspect temporelle (" exemple :jour 1 à jour 3") et le recoupement de l'ensemble de ces conditions (à faire plus tard !!).
L'idée pour déterminer si les conditions sont valables sur un temps donné est la suivante :

Code : Tout sélectionner

for (i in 1:length(France[,1])) {
if ((France [i,2] > 1800 & France [i + 1,2] > 1800 & France [i+2,2] > 1800) |(France [i,2] > 1200  & France [i+1,2] > France [i,2] & France [i+2,2] > France [i+1,2])){
a = a+1
}
}


Après cette exposé voici mes premières questions :
J'obtiens l'erreur suivante
missing value where TRUE/FALSE needed
Si je comprends bien, dans cette boucle à un certains moment il obtiens une valeur différente de TRUE et de FALSE (type #N/A) ? Comment gérer ce problème ?
Il y a t-il un moyen plus sexy que celle longue boucle (en passant par les indices matricielles) ?
Retour à la ligne possible sous R ?

Merci d'avance et bonne journée.

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Occurrence sur un laps de temps

Messagepar Pierre-Yves Berrard » 18 Mai 2017, 07:42

Pierre Nunes a écrit :J'obtiens l'erreur suivante
missing value where TRUE/FALSE needed
Si je comprends bien, dans cette boucle à un certains moment il obtiens une valeur différente de TRUE et de FALSE (type #N/A) ? Comment gérer ce problème ?

Probablement des valeurs manquantes dans France[ , 2] ?

Code : Tout sélectionner

anyNA(France[ , 2])
PY

Pierre Nunes
Messages : 2
Enregistré le : 17 Mai 2017, 08:06

Re: Occurrence sur un laps de temps

Messagepar Pierre Nunes » 19 Mai 2017, 08:44

L'erreur venait d'ailleurs (export des données avec M.Excel ...).
Je suis confronté à un vrai problème de débutant.
Je réalise le test temporel (valeur comprise entre 400 et 1100 de t + 1h à t + 10h) :

Code : Tout sélectionner

for (i in 1:(length(Belgique[,1])-10)){
dd <- difftime(Belgique[i+10,1],Belgique[i,1])
numda <- as.numeric(dd,units="hours") #pour avoir 10 et non la classe difftime
if (numda == 10)
    Belb[i,1:2] <- subset (Belgique, Belgique[i:(i+10),2] > 400 & 1100 > Belgique[i:(i+10),2])
}

Le problème étant que la matrice Belb est écrasé à chaque boucle. Néanmoins je n'ai aucune idée de la taille de cette matrice, elle peut faire jusqu'à (si belgique = 100 valeurs x 2 colonnes) 1000 lignes et 2 colonnes.
Je souhaite simplement que cette matrice se remplisse à chaque pas de temps et à la suite.
Un tri des valeurs redondantes sera effectué par la suite.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité