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

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

我在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日期”会被发送到时间序列的末尾,因此不起作用。

请选择。我很确定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个元素长

2009年不是闰年…@sparrow你没有读过这个问题我不确定你是否能做到,除非你只是把日期表示成一个字符串。R将日期存储为自1970年1月1日起的天数,因此
as.numeric(as.Date('2009-02-28',format=“%Y-%m-%d”)
is
14303
as.numeric(as.Date('2009-03-01',format=“%Y-%m-%d”)
is
14304
这就是为什么2月29日会有
NA
对不起,14303和14304之间没有整数。但是您想如何指定一个不可能的日期呢?您可以使用NA,也可以将不可能的日期作为字符串:
“2009-02-29”
您可以显示更多的数据结构吗<代码>midasr通常用于每周和每月的聚合数据。查看您想要使用的
midasr
包中的数据和函数会有所帮助。一旦您了解了如何为
sprintf
构建适当的格式字符串,这将非常有用。有些人更喜欢
formatC