我在R中有一个包含月度值的数据集。但是,有些月份不见了。例如:
“2001-09-01”“2001-10-01”“2001-12-01”“2002-02-01”
2001年11月失踪,2002年1月失踪。如何将这些月份包含在时间序列中并添加值0?
谢谢!
答案 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。