2016-05-03 59 views
2

我正在合併具有不同頻率的2個動物園時間序列。
一個包含月度數據,另一個包含季度數據。
如何在合併的動物園對象中滯後一列

library(Quandl) 

myDataFormat <- "zoo" 

pmi <- Quandl("FRED/NAPM", type = myDataFormat) 
gdp <- Quandl("FRED/A191RO1Q156NBEA", type = myDataFormat) 

pp <- aggregate(pmi, as.yearmon) 
gg <- aggregate(gdp, as.yearmon) 

mrg <- merge(pp,gg) 
mrg.tail <- tail(mrg,20) 

mrg.tail現在包含

  pp gg 
sep 2014 55.8 NA 
okt 2014 57.3 2.5 
nov 2014 57.5 NA 
dec 2014 54.9 NA 
jan 2015 53.9 2.9 
feb 2015 53.3 NA 
mrt 2015 52.3 NA 
apr 2015 51.6 2.7 
mei 2015 53.1 NA 
jun 2015 53.1 NA 
jul 2015 51.9 2.1 
aug 2015 51.0 NA 
sep 2015 50.0 NA 
okt 2015 49.4 2.0 
nov 2015 48.4 NA 
dec 2015 48.0 NA 
jan 2016 48.2 2.0 
feb 2016 49.5 NA 
mrt 2016 51.8 NA 
apr 2016 50.8 NA 

我正在尋找一種方法1個月滯後於GG列。
所以,結果應該是這樣的

  pp gg gg_new 
sep 2014 55.8 NA  2.5 
okt 2014 57.3 2.5  NA 
nov 2014 57.5 NA  NA 
dec 2014 54.9 NA  2.9 
jan 2015 53.9 2.9  NA 
feb 2015 53.3 NA  NA 
mrt 2015 52.3 NA  2.7 
apr 2015 51.6 2.7  NA 
mei 2015 53.1 NA  NA 
jun 2015 53.1 NA  2.1 
jul 2015 51.9 2.1  NA 
aug 2015 51.0 NA  NA 
sep 2015 50.0 NA  2.0 
okt 2015 49.4 2.0  NA 
nov 2015 48.4 NA  NA 
dec 2015 48.0 NA  2.0 
jan 2016 48.2 2.0  NA 
feb 2016 49.5 NA  NA 
mrt 2016 51.8 NA  NA 
apr 2016 50.8 NA  NA 

的gg_new值被上移1個月。
有誰知道如何做到這一點?

回答

3

使用lag並與原來的保持原有的幾個月,但沒有超出該範圍的任何滯後幾個月把它合併。

> merge(mrg.tail, g1 = lag(mrg.tail$gg), all = c(TRUE, FALSE)) 
      pp gg g1 
Sep 2014 55.8 NA 2.5 
Oct 2014 57.3 2.5 NA 
Nov 2014 57.5 NA NA 
Dec 2014 54.9 NA 2.9 
Jan 2015 53.9 2.9 NA 
Feb 2015 53.3 NA NA 
Mar 2015 52.3 NA 2.7 
Apr 2015 51.6 2.7 NA 
May 2015 53.1 NA NA 
Jun 2015 53.1 NA 2.1 
Jul 2015 51.9 2.1 NA 
Aug 2015 51.0 NA NA 
Sep 2015 50.0 NA 2.0 
Oct 2015 49.4 2.0 NA 
Nov 2015 48.4 NA NA 
Dec 2015 48.0 NA 2.0 
Jan 2016 48.2 2.0 NA 
Feb 2016 49.5 NA NA 
Mar 2016 51.8 NA NA 
Apr 2016 50.8 NA NA 

對於略有不同的結果請看lag(mrg.tail, 0:1)

0

您可以使用一個for循環來做到這一點:

for(i in 1:(nrow(mrg.tail)-1){   # Loop through all but last row 
    mrg.tail$gg_new[i] = mrg.tail$gg[i+1] 
} 
mrg.tail$gg_new[nrow(mrg.tail)] = NA  # This is to take care of the last row