2010-09-02 5 views
1

J'ai une série de zoo en R. Je peux choisir entre un index chron ou POSIXct.Agrégation de temps 15min en R

Comment puis-je agréger à 15min, en prenant le dernier élément toutes les 15min?

Je sais comment agréger tous les jours, écrire as.Date, mais pas comment agréger toutes les 15min.

merci.

+1

@ user425895: Faites-nous tous une faveur, et votez et acceptez les réponses. À l'heure actuelle, vous n'êtes pas un bon citoyen de SO. – Shane

Répondre

1

Voici quelques possibilités selon ce que vous voulez. Les deux font usage de trunc.times du paquet chron. La solution aggregate.zoo prend la dernière valeur dans chaque intervalle de 15 minutes et l'étiquette en utilisant l'heure au début de l'intervalle de 15 minutes, les temps utilisés sont donc: 00:00:00, 00:15:00, 00:30:00 et 00:45:00. La solution duplicated utilise les mêmes valeurs mais les marque en fonction de la dernière heure réellement trouvée dans les données. Dans les deux cas, nous incluons uniquement les intervalles pour lesquels des données sont présentes.

Il y a d'autres exemples de aggregate.zoo dans (1) ?aggregate.zoo, (2) les trois vignettes de zoo ont des exemples et (3) la recherche des archives r-aide pour les mots aggregate.zoo et trunc retrouve des exemples encore plus.

library(zoo) 
library(chron) 
z <- zoo(1:10, chron(1:10/(24*13))) 

# 1. last value in each 15 minute interval 
# using time at which interval begins 

aggregate(z, trunc(time(z), "00:15:00"), tail, 1) 

# 2. last value in each 15 minute interval 
# time of last point in data within interval 

z[!duplicated(trunc(time(z), "00:15:00"), fromLast = TRUE)] 
+0

Salut Ce que je dois ne « heure à laquelle l'intervalle commence » ni « temps de dernier point dans les données dans un intervalle » mais « heure à laquelle se termine l'intervalle » une analogie est ... J'ai besoin plafond au lieu de sol ou tronquer – skan

+0

J'ai pensé une solution possible: Ajouter 14 minutes, puis tronquer le résultat. Que pensez-vous? (Je suppose que mon nombre de secondes est 00) Le problème se produirait lorsque l'année change et quelques secondes intercalaires sont ajoutées. – skan

+0

Oui, delta <- as.numeric (times ("00:14:59")); agrégat (z, trunc (temps (z) + delta, "00:15:00"), queue, 1) devrait le faire. –

3

Si je me souviens, cela est documenté dans les vignettes zoo. Avez-vous regardé là?

Le paquet xts, qui se base sur zoo a des fonctions d'aide - voir help(to.period) en particulier et la fonction to.minutes15.