按时间顺序计算缺少的月份

时间:2011-09-12 19:01:15

标签: r time-series

我在R中有一个包含月度值的数据集。但是,有些月份不见了。例如:

“2001-09-01”“2001-10-01”“2001-12-01”“2002-02-01”

2001年11月失踪,2002年1月失踪。如何将这些月份包含在时间序列中并添加值0?

谢谢!

2 个答案:

答案 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))

请注意,这也可以通过R命令vignette("zoo-faq")或网络上的动物园常见问题解答13中的几个示例进行讨论:

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

答案 1 :(得分: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。