2017-09-23 5 views
2

J'ai l'ensemble de données: numéros année moisremplissage mois manquant en série de temps avec NA

2002-01 2.392909 
2002-02 2.496800 
2002-03 2.341897 
2002-04 1.665625 
2002-05 2.398261 
2003-01 1.765912 
2003-03 3.270870 
2003-12 2.907812 

Je dois finir avec:

2002-01 2.392909 
2002-02 2.496800 
2002-03 2.341897 
2002-04 1.665625 
2002-05 2.398261 
2002-06 NA 
2002-07 NA 
2002-08 NA 
2002-09 NA 
2002-10 NA 
2002-11 NA 
2002-12 NA 
2003-01 1.765912 
2003-02 NA 
2003-03 3.270870 
2002-04 NA 
2003-05 NA 
2003-06 NA 
2003-07 NA 
2003-08 NA 
2003-09 NA 
2003-10 NA 
2003-11 NA 
2003-12 2.907812 

tous les mois manquant remplira avec NA, jusqu'à Dec des idées très appréciées!

Répondre

1

Voici une solution. Il met en place une colonne de tous les mois de l'année, puis fusionne vos données dans celui-ci, de sorte que les blancs sont laissés là où vous n'avez pas de données.

merge(data.frame(V1=paste(rep(2002:2003,each=12), #the years 
          sprintf("%02d",1:12), #the months, padded with zeros 
          sep="-")), 
     df, #your dataframe (assumes the first column is "V1") 
     all.x=TRUE) 

     V1  V2 
1 2002-01 2.392909 
2 2002-02 2.496800 
3 2002-03 2.341897 
4 2002-04 1.665625 
5 2002-05 2.398261 
6 2002-06  NA 
7 2002-07  NA 
8 2002-08  NA 
9 2002-09  NA 
10 2002-10  NA 
11 2002-11  NA 
12 2002-12  NA 
13 2003-01 1.765912 
14 2003-02  NA 
15 2003-03 3.270870 
16 2003-04  NA 
17 2003-05  NA 
18 2003-06  NA 
19 2003-07  NA 
20 2003-08  NA 
21 2003-09  NA 
22 2003-10  NA 
23 2003-11  NA 
24 2003-12 2.907812 
0

En général, il est plus facile de traiter avec des séries chronologiques si nous utilisons une représentation des séries chronologiques telles que "zoo" ou "ts" classe en premier lieu.

library(zoo) 

z0 <- read.zoo(DF0, FUN = as.yearmon) # zoo object 
tt <- as.ts(z0) # convert to ts class -- this fills in the NAs 
zz <- as.zooreg(tt) # convert back to zoo 
fortify.zoo(zz) # convert to data.frame 

Nous pourrions arrêter après avoir créé tt ou zz si un objet de série chronologique est préférable que le résultat.

magrittr

Cela peut alternativement être exprimé en ce pipeline magrittr:

library(magrittr) 
library(zoo) 

DF0 %>% 
    read.zoo(FUN = as.yearmon) %>% 
    as.ts %>% 
    as.zooreg %>% 
    fortify.zoo 

Note: L'entrée DF0 sous forme reproductible a été supposé être:

Lines <- " 
2002-01 2.392909 
2002-02 2.496800 
2002-03 2.341897 
2002-04 1.665625 
2002-05 2.398261 
2003-01 1.765912 
2003-03 3.270870 
2003-12 2.907812" 
DF0 <- read.table(text = Lines, header = TRUE)