6

我试图弄清楚xts在执行 apply.period 后使用什么(或动物园)作为时间。考虑以下:

> myTs = xts(1:10, as.Date(1:10, origin = '2012-12-1'))
> apply.weekly(myTs, colSums)
           [,1]
2012-12-02    1
2012-12-09   35
2012-12-11   19

我认为“2012-12-02”的意思是“在 2012-12-02 结束的那一周,总和为 1”。所以基本上时间是周末。

但问题在于“2012-12-11”——我认为它在说 11 号是一周的最后一天所以它把它作为时间。

有没有办法强制它给出它结束的星期天,即使那一天不包括在数据集中?

4

3 回答 3

5

尝试这个:

nextsun <- function(x) 7 * ceiling(as.numeric(x-0+4) / 7) + as.Date(0-4)
aggregate(myTs, nextsun, sum)

wherenextsun源自动物园快速参考nextfri中给出的代码,将 5(周五)替换为 0(周日)。

于 2012-12-19T10:53:28.727 回答
4

那是整整几周。它只向您显示最后一次观察的日期。请参阅?endpoints( apply.weekly, 本质上是端点的薄包装器)。

apply.weekly
function (x, FUN, ...) 
{
    ep <- endpoints(x, "weeks")
    period.apply(x, ep, FUN, ...)
}
<environment: namespace:xts> 

从?端点

endpoints 返回一个数字向量,对应于 on 指定的每个周期中的最后一个观测值,向量的开头添加一个零,最后一个观测值在 x 中的索引位于末尾。

参数的有效值包括:“us”(微秒)、“微秒”、“ms”(毫秒)、“毫秒”、“秒”(秒)、“秒”、“分钟”(分钟)、“分钟” ”、“小时”、“天”、“周”、“月”、“季度”和“年”。

你的第二个问题的答案是否定的,没有选择这样做。但是你总是可以手动编辑最后一个日期,如果你无论如何都要展示所有数据,我认为它没有任何害处。

于 2012-12-19T06:18:05.860 回答
2

不,你不能强迫它给你星期天。

因为 period.apply 结果的索引由下式给出

ep <- endpoints(myTs,'weeks') 

myTs[ep]
           [,1]
2012-12-02    2
2012-12-09    9
2012-12-10   10

所以你需要改变最后一个日期。不幸的是 xts 不提供此选项,您不能移动索引的单个值。我不知道为什么(也许设计选择获得唯一索引)

例如,您可以进行流动:

ts.weeks <- apply.weekly(myTs, colSums)
ts.weeks[length(ts.weeks)] <- last(index(myTs)) + 7-last(floor(diff(ep)))
于 2012-12-19T07:53:00.013 回答