我在R中使用名为midasr的软件包,它可以帮助我使用每日数据作为回归量来预测月度数据。为此,我需要确保在给定年份中的每个月都有相同的天数。例如,在2月份它从未进入第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”日期'被发送到时间序列的末尾,以便无法正常工作。
答案 0 :(得分:3)
选择你自己。我非常确定动物园可以处理其索引的有序字符向量;
> 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个元素。