【问题标题】:How to deal with impossible dates for midasr package如何处理 midasr 包的不可能日期
【发布时间】:2014-03-23 07:36:23
【问题描述】:

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

【问题讨论】:

  • 2009 年不是闰年...
  • @sparrow 你没有看问题
  • 我不确定您是否可以这样做,除非您只是将日期表示为字符串。 R 将日期存储为从 1970 年 1 月 1 日开始的天数,所以 as.numeric(as.Date('2009-02-28', format="%Y-%m-%d"))14303as.numeric(as.Date('2009-03-01', format="%Y-%m-%d"))14304 所以这就是为什么你在 2 月 29 日得到 NA 的原因——在 14303 和14304
  • 对不起。但是你想如何指定一个不可能的日期?您可以有一个 NA,或者将不可能的日期作为字符串:"2009-02-29"
  • 你能展示更多你的数据结构吗? midasr 通常与每周和每月汇总数据一起使用。查看您要使用的 midasr 包中的数据和函数会有所帮助。

标签: r


【解决方案1】:

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

【讨论】:

  • 一旦你弄清楚如何为sprintf 构建正确的格式字符串,它就非常有用。有些人更喜欢formatC
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多