2010-11-09 4 views
3

J'ai quelques séries de zoo qui utilisent l'index POSIXct.R: Agrégation par dates avec POSIXct?

Afin de regrouper par jours, j'ai essayé ces deux façons:

aggregate(myzoo,format((index((myzoo)),"%Y-%m-%d")),sum) 

aggregate(myzoo,as.Date(index(myzoo)),sum) 

Je ne sais pas pourquoi ils ne donnent pas la même sortie. myzoo series a été supprimé le week-end. Le "as.Date Way" semble être OK mais l'agrégation "formatage" me donne des données sur les week-ends.

Pourquoi?

Lequel est le bon?

J'ai même essayé as.POSIXct(format(...))

+0

Est-ce que vous avez des données avec des horodateurs? Veuillez fournir un échantillon des données. Vous pouvez avoir des fuseaux horaires dans l'objet POSIXct qui déplacent ensuite vos données. – Shane

+0

Considérons 'format()' comme une conversion pauvre et avec perte pour les dates. Ne l'utilisez pas. Cela peut être pratique, et vous pouvez trier le format que vous avez choisi, mais ce n'est pas une bonne représentation pour les dates. –

+0

Salut. strptime à la place? Je ne fournis pas de données parce que j'utilise de gros fichiers et que c'est un peu complexe. – skan

Répondre

2

Comme je l'ai mentionné dans mon commentaire, vous devez être prudent lorsque vous modifiez le format d'un horodatage qui inclut le temps avec un fuseau horaire, car il peut se déplacé entre les jours. Sans données, il est difficile de dire exactement ce que votre problème est, mais vous pouvez aussi essayer apply.daily de xts:

apply.daily(myzoo, sum) 

Voici un exemple de travail:

> x <- zoo(2:20, as.POSIXct("2003-02-01") + (2:20) * 7200) 
> apply.daily(x, sum) 
> 2003-02-01 22:00:00 2003-02-02 16:00:00 
       65     144