2010-12-06 68 views
4

Qu'est-ce qu'un moyen facile de contraindre des données de séries temporelles à une trame de données, dans un format où les données résultantes sont un résumé de l'original?R: convertir un objet xts ou zoo en une trame de données

Cela pourrait être des données par exemple, stockées dans XTS ou objet zoo:

t,     V1 
"2010-12-03 12:00", 10.0 
"2010-11-04 12:00", 10.0 
"2010-10-05 12:00", 10.0 
"2010-09-06 12:00", 10.0 
...and so on, monthly data for many years. 

et je voudrais le transformer en une trame de données comme:

year, month, V1 
2010, 12, a descriptive statistic calculated of that month's data 
2010, 11, ... 
2010, 10, ... 
2010, 9,  ... 

La raison pour laquelle je suis En demandant ceci, c'est parce que je veux tracer des résumés calculés mensuellement des données dans le même complot. Je peux le faire assez facilement pour les données dans ce dernier format, mais je n'ai pas trouvé de méthode de traçage pour le format de séries chronologiques. Par exemple, je pourrais avoir des données de température de plusieurs années mesurées dans un intervalle quotidien et je voudrais tracer les courbes pour les températures moyennes mensuelles pour chaque année dans la même parcelle. Je n'ai pas compris comment faire cela en utilisant les données au format xts, ou si cela correspondait même au but du formatage des données par xts/zoo, qui semble toujours porter l'information de l'année le long de celle-ci.

+2

vous savez qu'il est jamais trop tard pour accepter des réponses comme « meilleure réponse » –

Répondre

6

Veuillez fournir un échantillon de données à utiliser et je vais essayer de vous fournir une réponse moins générale. Fondamentalement, vous pouvez utiliser apply.monthly pour calculer des statistiques récapitulatives sur votre objet xts. Ensuite, vous pouvez convertir l'index en yearmon et convertir l'objet xts en un nom de données.

x <- xts(rnorm(50), Sys.Date()+1:50) 
mthlySumm <- apply.monthly(x, mean) 
index(mthlySumm) <- as.yearmon(index(mthlySumm)) 
Data <- as.data.frame(mthlySumm) 
+1

Et vous pouvez retirer l'année et le mois avec 'format' avec des lignes comme' as.numeric (format (index (x), "% Y")) 'et' as.numérique (format (index (x), "% m")) ' –

+0

Ils ont été très utiles, merci. Il me manquait la fonction index() ainsi que les fonctions format(). Maintenant, il est plus facile de jouer avec mes données. – user442446

+3

@ user442446 Si cela répond à votre question, vous devriez l'accepter comme "meilleure réponse". Vous devriez également le faire pour les 5 autres questions que vous avez posées, puisque vous n'avez pas marqué de «meilleures réponses» pour l'une de vos questions. –

0

Voici une solution en utilisant le package tidyquant, qui inclut des fonctions as_xts() pour contraindre des trames de données sur les objets XTS et as_tibble() pour contraindre les objets XTS à tibbles (données "bien rangé" frames).

Recréer vos données:

> data_xts 
      V1 
2010-09-06 10 
2010-10-05 10 
2010-11-04 10 
2010-12-03 10 

Utilisez as_tibble() pour convertir un Tibble. Le preserve_row_names = TRUE ajoute une colonne appelée "row.names" avec l'index xts comme classe de caractères. Un rename et mutate sont utilisés pour nettoyer les dates. La sortie est un fichier avec des dates et des valeurs.

> data_df <- data_xts %>% 
    as_tibble(preserve_row_names = TRUE) %>% 
    rename(date = row.names) %>% 
    mutate(date = as_date(date)) 
> data_df 
# A tibble: 4 × 2 
     date V1 
     <date> <dbl> 
1 2010-09-06 10 
2 2010-10-05 10 
3 2010-11-04 10 
4 2010-12-03 10 

Vous pouvez aller plus loin et d'ajouter d'autres domaines tels que le jour, le mois et l'année en utilisant la fonction mutate.

> data_df %>% 
    mutate(day = day(date), 
      month = month(date), 
      year = year(date)) 
# A tibble: 4 × 5 
     date V1 day month year 
     <date> <dbl> <int> <dbl> <dbl> 
1 2010-09-06 10  6  9 2010 
2 2010-10-05 10  5 10 2010 
3 2010-11-04 10  4 11 2010 
4 2010-12-03 10  3 12 2010