apply.monthly给出月份中最后一次观察的日期,而不是月份的最后一天

时间:2015-04-21 19:18:49

标签: r date xts

我有一个时间序列(xts对象),它由一个超过65年的几个月的值组成。以下是时间序列的头尾:

1951-08-10  61.4030
1952-01-12  52.3773
1952-05-03 123.2899
1952-06-04 159.8922
1952-06-25 216.2244
1952-11-16 145.0869
....
2014-11-05  8.055283
2014-12-31 13.814598
2015-01-24 17.147218
2015-02-17 16.838870
2015-03-05 18.058845
2015-03-29 15.313688

一个月内的日子没有简单的周期。任何一个月的值的数量范围从1到4;有些月份完全没有了。我想把它变成月度时间序列。当我在xts对象上运行apply.monthly FUN=mean时,结果是每月时间序列,其中DATE是该月最后一条记录的日期,而不是该月的最后一天的日期,这就是我想要的。

我在日常数据上运行了很多其他时间序列,当我使用apply.monthly时,我得到了当月的最后一天,我无法弄清楚为什么这不起作用。我找到了几乎完全显示这种用法的示例(例如在R Cookbook中),输出是该月的最后一天。我希望这个月的最后一天与我正在比较的另一个时间序列相匹配。我尝试将roll.applyalign=c("right")一起使用,但结果相同。

有没有办法强制apply.monthly给出月份的最后一天,而不是输出中一个月内的最后一天?或者我的时间序列中是否有某些内容导致此输出而不是本月最后一天的“标准”输出作为日期?

1 个答案:

答案 0 :(得分:3)

apply.monthly始终返回每个观察月份的最后一次观察,而不是所有月份的最后日期。它可能会在其他情况下返回该月的最后一天,因为您的数据会在该月的最后一天进行观察。

但是你不需要apply.monthly这样做才能做你想做的事。

# sample data
x <-
  structure(c(8.055283, 13.814598, 17.147218, 16.83887, 18.058845, 15.313688),
    .Dim = c(6L, 1L), index = structure(c(1415145600, 1419984000, 1422057600,
    1424131200, 1425513600, 1427587200), tzone = "UTC", tclass = "Date"),
    class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date",
   .indexTZ = "UTC", tzone = "UTC")
m <- xts(1:5, seq(as.Date("2014-12-01"), by="month", length=5) - 1)
# merge your data with an 'empty' xts object with an end-of-month index
eom <- xts(,index(m))
mx <- apply.monthly(merge(x, eom), mean, na.rm=TRUE)
#                    x
# 2014-11-30  8.055283
# 2014-12-31 13.814598
# 2015-01-31 17.147218
# 2015-02-28 16.838870
# 2015-03-31 16.686267