3 votes

Diviser chaque ligne d'un objet de série temporelle xts ou zoo par une ligne fixe

J'essaie de diviser un objet xts qui contient un certain nombre de séries temporelles (colonnes) avec une colonne de date commune (index). Je veux diviser chaque colonne par sa valeur à une date spécifiée (disons '2010-09-30'). Ceci afin de ré-échelonner l'objet entier avec des valeurs de 1 dans chaque colonne à cette date (une tâche courante de ré-échelonnement). S'il s'agissait d'une matrice ordinaire, A et la ligne sur laquelle je voulais rebasculer était la suivante A[6,] Je pourrais simplement faire

t(t(A)/A[6,])

et cela fonctionne. Mais en essayant de manipuler l'objet xts et son sous-ensemble de lignes xts['2010-09-30'] ne fonctionne pas aussi facilement. Quelqu'un pourrait-il m'indiquer la bonne direction ? Je suis conscient que c'est très basique et que j'aurais dû trouver la réponse tout seul. En fait, s'il existe une meilleure méthode en général pour rebaser des séries temporelles de cette manière à l'aide d'un package, je suis heureux d'adopter cette approche.

3voto

Joshua Ulrich Points 68776

Les objets xts et zoo sont alignés par index avant les opérations. Si vous souhaitez diviser un objet entier par une valeur sur une seule ligne, vous devez utiliser l'option coredata (et peut-être drop ) pour obtenir la valeur d'un vecteur atomique (avec un seul élément).

Par exemple :

library(xts)
x <- xts(1:10,as.Date("2011-12-21")+1:10)
x / drop(coredata(x['2011-12-26']))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X