我试图找出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日是的最后一天 >,所以这就是时间。
有没有办法强制它给它结束的星期日,即使那天没有包含在数据集中?
答案 0 :(得分:4)
这些都是整整一周。它只显示最后一次观察的日期。请参阅?endpoints
(apply.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)))