如何处理midasr包装的不可能日期



我正在使用R中的一个名为midasr的包,它可以帮助我使用每日数据作为回归量来预测月度数据。为此,我需要确保给定年份中的每个月都有相同的天数。例如,在像二月这样的月份,它从来没有到过30日或31日,我仍然需要能够为该日期指定一个值(NA),以便保持一致的格式。当我尝试指定在现实生活中从未发生过的日期时(2009年是非闰年,所以29日不会发生),我会在日期列下得到一个NA,如下所示。有办法解决这个问题吗?我需要它显示"2009-02-29"。

> as.Date('2009-02-29', format="%Y-%m-%d")
[1] NA
> as.Date('2009-02-25', format="%Y-%m-%d")
[1] "2009-02-25"
> as.Date('2009-02-27', format="%Y-%m-%d")
[1] "2009-02-27"
> as.Date('2009-02-28', format="%Y-%m-%d")
[1] "2009-02-28"
> as.Date('2009-02-29', format="%Y-%m-%d")
[1] NA

附加:我还尝试让"不可能的"日期保持为"NA",并将其放在数据框架中的正确顺序中(在这种情况下,2月28日以下)。但是当我把它变成一个动物园对象时,'NA date'被发送到时间序列的末尾,所以这不起作用。

选择吧。我很确定zoo可以处理有序的字符向量作为索引;

>  paste(2009, sprintf("%02s",rep(1:12, each=31)), sprintf("%02s", 1:31), sep="-") [55:65]
[1] "2009-02-24" "2009-02-25" "2009-02-26" "2009-02-27" "2009-02-28" "2009-02-29"
[7] "2009-02-30" "2009-02-31" "2009-03-01" "2009-03-02" "2009-03-03"
str (as.Date( paste(year, rep(1:12, each=31), 1:31, sep="-") ) )
 Date[1:372], format: "2009-01-01" "2009-01-02" "2009-01-03" "2009-01-04" ...
> as.Date( paste(2009, rep(1:12, each=31), 1:31, sep="-") ) [55:65]
 [1] "2009-02-24" "2009-02-25" "2009-02-26" "2009-02-27" "2009-02-28" NA          
 [7] NA           NA           "2009-03-01" "2009-03-02" "2009-03-03"

请注意,paste(与data.frame一样)将回收短向量,这解释了为什么"2009"不需要rep,以及为什么第二个rep(.)只有31个元素长。

最新更新