la conversion d'un bloc de données de séries chronologiques mensuelles
J'ai un bloc de données de données mensuelles pour les 100 ans (1200 points de données) avec les mois dans des colonnes et des années dans les rangs. Je veux le convertir en un temps mensuel de la série et j'ai essayé de plusieurs façons, mais aucune de créer le "temporel" de la structure.
Le problème se trouve avec R compte tenu de la trame de données comme un 100 observations (en années) de 12 variables (le mois). Voici une reproductibles code pour mon dernier essai:
set.seed(12)
dummy.df <- as.data.frame(matrix(round(rnorm(1200),digits=2),nrow=100,ncol=12))
rownames(dummy.df) <- seq(from=1901, to=2000)
colnames(dummy.df) <- c("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec")
dummy.df.ts <- ts(as.vector(as.matrix(dummy.df)), start=c(1901,1), end=c(2000,12), frequency=12)
Dans le "mannequin.df.ts" objet, les lignes et les colonnes sont inversées et au lieu de séquentielles des observations dans des colonnes, toutes les januarys februarys etc sont empilés les uns après les autres. Comment puis-je obtenir à la bonne structure temporelle?
Un exemple de mes données: ce sont des mensuels les valeurs de température, à partir de 1901 - 1905
fr.monthly.temp.sample
JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
1901 2.7 0.4 4.7 10.0 13.0 16.9 19.2 18.3 15.7 10.6 4.9 3.5
1902 4.1 3.2 7.5 10.3 10.0 15.1 18.2 17.4 15.0 10.2 6.3 3.5
1903 3.8 5.9 7.6 7.1 12.9 14.9 17.6 17.3 15.5 12.1 6.9 2.7
1904 3.0 4.6 5.5 10.3 13.6 16.3 20.2 18.5 13.9 11.2 5.4 4.8
1905 1.7 4.0 7.4 9.3 11.9 16.5 20.0 17.6 14.7 8.4 5.5 3.8
Et en utilisant ce ts() appel:
fr.monthly.temp.sample.ts <- ts(as.vector(as.matrix(fr.monthly.temp.sample)), start=c(1901,1), end=c(1905,12), frequency=12)
C'est le résultat que j'obtiens pour le moment, la série de l'objet:
fr.monthly.temp.sample.ts
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1901 2.7 4.1 3.8 3.0 1.7 0.4 3.2 5.9 4.6 4.0 4.7 7.5
1902 7.6 5.5 7.4 10.0 10.3 7.1 10.3 9.3 13.0 10.0 12.9 13.6
1903 11.9 16.9 15.1 14.9 16.3 16.5 19.2 18.2 17.6 20.2 20.0 18.3
1904 17.4 17.3 18.5 17.6 15.7 15.0 15.5 13.9 14.7 10.6 10.2 12.1
1905 11.2 8.4 4.9 6.3 6.9 5.4 5.5 3.5 3.5 2.7 4.8 3.8
--Notez le changement de la structure temporelle (les valeurs des colonnes sont maintenant dans les lignes..)--
Grâce.
plot
. Probablement, vous pouvez obtenir de meilleures réponses à l'aide d'un échantillon de vos données, il suffit d'un couple d'années, et l'affichage du graphique que vous obtenez.j'ai ajouté mes données d'origine et les parcelles de montrer le mauvais ordre des valeurs. Votre EDIT 1 solution me donne des séries chronologiques multivariées qui n'est pas ce que je veux, je veux le garder comme un univariée de la série pour la poursuite du traitement..comme pour l'ÉDITION 2, j'ai essayé aussi.vector() pour la même raison, mais c'est l'opération qui est à l'origine de la commande en question. peut-être la solution n ° 1 posté par @Alexandre de travail, j'ai encore essayer..
Mon edit 1 n'était pas une solution... c'était juste pour faire connaissance sur la façon de ts() fonctionne. Mon edit 2 a commencé avec les données DÉJÀ dans un vecteur... je ne savais pas que vous avez juste besoin d'un transposer...
round(seq(5,10,length.out=24),1)
est un vecteur.
OriginalL'auteur avg | 2013-04-27
Vous devez vous connecter pour publier un commentaire.
Solution 1
On pourrait transposer (fonction t()) la matrice avant de la vectorisation:
Solution 2
Vous pourriez faire fondre les données, tri par date, puis appliquer le ts() fonction.
Voici les données de l'installation. Si votre paramètre de langue est l'anglais, vous pourriez économiser un peu de code en utilisant les mois.abb, mais qui n'est pas robuste à d'autres paramètres régionaux de langue.
Faire fondre les données de sorte que vous avez une trame de données avec 1200 lignes, chacune représentant une observation:
Ordre les observations en date:
Vous pouvez ensuite appliquer un semblable ts (), avec le ts d'objets montrant l'ordre souhaité:
solution 1 n'est exactement ce que je veux..merci!
OriginalL'auteur Alexander Vos de Wael