Moyennes par minute - Timestamp

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

Marine Duperat
Messages : 25
Enregistré le : 14 Avr 2016, 07:54

Moyennes par minute - Timestamp

Messagepar Marine Duperat » 21 Fév 2018, 03:00

Bonjour à tous,

j'ai de gros jeux de données de vent (m.s-1) et de jauges de contraintes (mV/V) à traiter (pour moi ils sont gros en tout cas) :
- pour le vent une donnée aux 20 ms
- pour les jauges une donnée aux 2 sec
Le tout pendant plusieurs jours d'affilés.

J'aimerais pouvoir faire une moyenne de mes valeurs de vent et de contrainte par minute.
Mes timestamp ressemblent à ça (j'utilise soit {Base} soit {lubridate} ) en fonction des difficultés que je rencontre (oui je bidouille beaucoup pour les dates mais parfois ce qui marche un jour ne marche plus le lendemain et je ne sais pas pourquoi ...)

Code : Tout sélectionner

 2018-02-19 10:24:39
 2018-02-19 10:24:39.2


Mes jeux de données ressemblent à ça :

Code : Tout sélectionner

> summary(Vent)
      Date              TIMESTAMP                      Heure           variable     
 Min.   :2018-02-13   Min.   :2018-02-13 10:04:37   Length:2596051     WS_H:2596051 
 1st Qu.:2018-02-14   1st Qu.:2018-02-14 22:08:00   Class :character                 
 Median :2018-02-16   Median :2018-02-16 10:11:22   Mode  :character                 
 Mean   :2018-02-15   Mean   :2018-02-16 10:11:22                                   
 3rd Qu.:2018-02-17   3rd Qu.:2018-02-17 22:14:45                                   
 Max.   :2018-02-19   Max.   :2018-02-19 10:18:07                                   
     value       
 Min.   : 0.000 
 1st Qu.: 0.490 
 Median : 1.470 
 Mean   : 1.945 
 3rd Qu.: 2.940 
 Max.   :13.720
 
 > str(Vent)
'data.frame':   2596051 obs. of  5 variables:
 $ Date     : Date, format: "2018-02-13" "2018-02-13" "2018-02-13" "2018-02-13" ...
 $ TIMESTAMP: POSIXct, format: "2018-02-13 10:04:37" "2018-02-13 10:04:38" "2018-02-13 10:04:38" "2018-02-13 10:04:38" ...
 $ Heure    : chr  "23:46:34" "23:46:36" "23:46:38" "23:46:40" ...
 $ variable : Factor w/ 1 level "WS_H": 1 1 1 1 1 1 1 1 1 1 ...
 $ value    : num  1.96 2.45 1.96 1.96 2.45 1.96 1.96 1.96 2.45 1.96 ...

Code : Tout sélectionner

> summary(Jauge)
   TIMESTAMP                   variable        value             Date               Heure         
 Min.   :2018-02-18 23:46:34   10N:19304   Min.   :0.4064   Min.   :2018-02-18   Length:19304     
 1st Qu.:2018-02-19 02:27:25               1st Qu.:0.4065   1st Qu.:2018-02-19   Class :character 
 Median :2018-02-19 05:08:17               Median :0.4066   Median :2018-02-19   Mode  :character 
 Mean   :2018-02-19 05:08:17               Mean   :0.4066   Mean   :2018-02-18                     
 3rd Qu.:2018-02-19 07:49:08               3rd Qu.:0.4068   3rd Qu.:2018-02-19                     
 Max.   :2018-02-19 10:30:00               Max.   :0.4743   Max.   :2018-02-19   
 
 > str(Arbre)
'data.frame':   19304 obs. of  5 variables:
 $ TIMESTAMP: POSIXct, format: "2018-02-18 23:46:34" "2018-02-18 23:46:36" "2018-02-18 23:46:38" "2018-02-18 23:46:40" ...
 $ variable : Factor w/ 1 level "10N": 1 1 1 1 1 1 1 1 1 1 ...
 $ value    : num  0.407 0.407 0.407 0.407 0.407 ...
 $ Date     : Date, format: "2018-02-18" "2018-02-18" "2018-02-18" "2018-02-18" ...
 $ Heure    : chr  "23:46:34" "23:46:36" "23:46:38" "23:46:40" ...


J'ai essayé de créer des colonnes avec uniquement la Date et uniquement l'Heure pour que ce soit plus facile à traiter mais en vrai je suis juste bloquée depuis 1 semaine là dessus ...

Concrètement, j'aimerais calculer pour mon vent et pour mes jauges une value moyenne par minute ou par 3 minutes, j'ai essayé avec summaryBy, avec tapply, mais je pense que je m'y prends mal ...

Merci d'avance à ceux qui essayeront de m'aider, n'hésitez pas à demander si vous avez besoin d'infos supplémentaires, je ne code pas depuis longtemps donc j'ai peut etre oublié des infos importantes :)
Marine.

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Moyennes par minute - Timestamp

Messagepar Serge Rapenne » 21 Fév 2018, 08:49

Bonjour,

Une solution possible avec les fonctions de base

Code : Tout sélectionner

with(vent,tapply(value,c(variable,format(TIMESTAMP,"%Y-%m-%d %H:%M)),mean)

le principe est le même pour Jauge

ou avec dplyr

Code : Tout sélectionner

library(dplyr)
vent %>% group_by(variable,format(TIMESTAMP,"%Y-%m-%d %H:%M)  %>% summarise(value_min=mean(value))


Serge

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Moyennes par minute - Timestamp

Messagepar Serge Rapenne » 21 Fév 2018, 09:37

Pour le groupement toutes les 3 minutes, j'ajouterais une colonne de groupe pour les minutes et j'ajouterais cette colonne aux variables de groupage .

Qq chose comme ça :

Code : Tout sélectionner

vent$groupe_minute<-as.integer(format(vent$TIMESTAMP),"%M") %/% 3
with(vent,tapply(value,c(variable,format(TIMESTAMP,"%Y-%m-%d %H:%M),groupe_minute),mean)

ou avec dplyr

Code : Tout sélectionner

vent %>% mutate(groupe_minute=as.integer(format(TIMESTAMP),"%M") %/% 3 ) %>% group_by(variable,format(TIMESTAMP,"%Y-%m-%d %H:%M),groupe_minute)  %>% summarise(value_min=mean(value))

Serge
EDIT : erreur de ma part, en l’état ça ne va pas marcher. il faut remplacer les

Code : Tout sélectionner

format(TIMESTAMP,"%Y-%m-%d %H:%M)
par

Code : Tout sélectionner

format(TIMESTAMP,"%Y-%m-%d %H)

Marine Duperat
Messages : 25
Enregistré le : 14 Avr 2016, 07:54

Re: Moyennes par minute - Timestamp

Messagepar Marine Duperat » 21 Fév 2018, 13:37

Super merci de la rapidité de réponse ! Je vais essayer tout ça de ce pas :) croisons les doigts !

Edit : pour l'instant ça ne marche pas, j'essaye de bidouiller un peu avec tes codes et je reviens si jamais je ne trouve pas la solution
Marine.

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Moyennes par minute - Timestamp

Messagepar Serge Rapenne » 21 Fév 2018, 14:24

Qu'est ce qui ne marche pas , tu as un message d'erreur, les valeurs attendues sont fausses ?

Fournit un extrait de tes données en collant sur le forum le résultat de la sortie de la commande

Code : Tout sélectionner

dput(vent[1:20,])

pour que nous puissions faire des tests.

Serge


Retourner vers « Questions en cours »

Qui est en ligne

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