使用apply.weekly()强制整整几周

时间:2012-12-19 02:52:02

标签: r xts zoo

我试图找出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日是的最后一天 >,所以这就是时间。

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

3 个答案:

答案 0 :(得分:4)

这些都是整整一周。它只显示最后一次观察的日期。请参阅?endpointsapply.weekly,本质上是端点的薄包装器。)

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

来自?端点

  

端点返回与最后一个对应的数字向量   在on指定的每个时间段内观察,加零   向量的开头,以及x中最后一次观察的索引   结束。

     

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

你的第二个问题的答案是否定的,没有选择这样做。但是你总是可以手动编辑最后一个日期,如果你要呈现所有被包裹的数据,我认为它没有任何损害。

答案 1 :(得分:4)

试试这个:

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

其中nextsun来自zoo quick reference代码中给出的nextfri代码,将5(星期五)替换为0(星期日)。

答案 2 :(得分: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)))