我在R中有一個包含每月值的數據集。但是,有些月份不見了。例如:在時間序列中計算丟失的月份
「2001-09-01」, 「2001-10-01」, 「2001-12-01」, 「2001年2002-02-01」
月失蹤,2002年1月失蹤。我如何在時間序列中包含這些月份並添加0值?
謝謝!
我在R中有一個包含每月值的數據集。但是,有些月份不見了。例如:在時間序列中計算丟失的月份
「2001-09-01」, 「2001-10-01」, 「2001-12-01」, 「2001年2002-02-01」
月失蹤,2002年1月失蹤。我如何在時間序列中包含這些月份並添加0值?
謝謝!
假設你有一個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,如果你的願望。
由於這是一個月度系列,所以將其表示爲"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
如果你提供你將獲得更多的有用的答案你的數據對象的結構。請提供'dput(head(mydata,10))'的輸出。 –