使用较低时间尺度的信号填充(填充)每月动物园对象的任何方法?

时间:2012-10-18 05:47:58

标签: r zoo lubridate

假设我有一系列动物园数据,其中包含来自集合{0,1}的信号。

e.g。

         a b c
Oct 2005 1 0 1
Nov 2005 0 1 1
Dec 2005 0 1 0
Jan 2006 1 0 0
Feb 2006 1 1 0
Mar 2006 0 0 1
Apr 2006 0 0 1
May 2006 0 1 1
Jun 2006 1 1 0
Jul 2006 0 1 1
Aug 2006 1 0 0
Sep 2006 0 1 1
Oct 2006 0 1 1
Nov 2006 1 0 0
Dec 2006 0 0 1
Jan 2007 1 1 1
Feb 2007 0 1 0
Mar 2007 1 1 0
Apr 2007 0 0 0
May 2007 1 0 0

是否有一种聪明的矢量化方法来填充月份之间的日常数据和信号值?此外,它需要滞后一个。因此对于2005年10月的第1行。 a,b,c = c(1,0,1),我想用2005年11月的那一组填充{1,0,1}。接下来,将是2005年11月= {0,1,1},12月全部将填充这些值... 等到第n个月。

我更愿意按月开始生成,但要将已填充的每日值进行分析。我正在考虑像excel中的自动过滤或数据透视表这样的东西。

1 个答案:

答案 0 :(得分:2)

由于动物园,这实际上相当直接。首先,将对象的索引从yearmon转换为Date。然后从该系列的开始到结束生成每日日期序列。最后,合并并填写缺失值。

# assuming your monthly series is called 'Z'
# create new object and convert index to Date
z <- Z
index(z) <- as.Date(index(z))

# generate daily sequence
# note that yearmon are converted to the first Date of the month,
# so I add one month and subtract one day from the last yearmon value
dailySeq <- seq(start(z), as.Date(end(Z)+1/12)-1, by="1 day")

# merge z with empty zoo object containing the new daily index
d <- merge(z, zoo(,dailySeq))
# fill in missing values using last-observation-carried-forward
d <- na.locf(d)