2011-09-12 23 views
2

我在R中有一個包含每月值的數據集。但是,有些月份不見了。例如:在時間序列中計算丟失的月份

「2001-09-01」, 「2001-10-01」, 「2001-12-01」, 「2001年2002-02-01」

月失蹤,2002年1月失蹤。我如何在時間序列中包含這些月份並添加0值?

謝謝!

+0

如果你提供你將獲得更多的有用的答案你的數據對象的結構。請提供'dput(head(mydata,10))'的輸出。 –

回答

2

假設你有一個data.frame數據,稱爲dat1

dat1 <- data.frame(
    date = as.Date(c("2001-09-01", "2001-10-01", "2001-12-01", "2002-02-01")), 
    val = 1:4 
) 

然後,您可以創建一個包含所有你需要的日期一列第二data.frame。使用seq.Date創建這個序列:

dat2 <- data.frame(
    date = seq(as.Date("2001-09-01"), by="1 month", length.out=7) 
) 

然後,它是一個簡單的merge操作:

merge(dat1, dat2, all=TRUE) 
     date val 
1 2001-09-01 1 
2 2001-10-01 2 
3 2001-11-01 NA 
4 2001-12-01 3 
5 2002-01-01 NA 
6 2002-02-01 4 
7 2002-03-01 NA 

的遺漏值是NA但你可以使用子集將它們設置爲0,如果你的願望。

4

由於這是一個月度系列,所以將其表示爲"yearmon"班級時間的系列可能是有意義的。前幾行設置測試數據和最後兩行實際填充:

# set up input data as a zoo series 
library(zoo) 
d <- c("2001-09-01", "2001-10-01", "2001-12-01", "2002-02-01") 
z <- zoo(1:4, as.yearmon(d)) 

# merge with zero width series 
g <- seq(start(z), end(z), 1/12) 
zz <- merge(z, zoo(, g), fill = 0) 

如果"ts"一系列需要再使用as.ts(zz)或者動物園系列"Date"類的時間被通緝再試試: time(zz) <- as.Date(time(zz))

注意,這也與幾個例子在動物園裏常見問題的FAQ 13可通過R命令vignette("zoo-faq")或在網上在討論:

http://cran.r-project.org/web/packages/zoo/vignettes/zoo-faq.pdf