Принудительно полных недель с apply.weekly()
Я пытаюсь выяснить, что 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 ответа
Попробуй это:
nextsun <- function(x) 7 * ceiling(as.numeric(x-0+4) / 7) + as.Date(0-4)
aggregate(myTs, nextsun, sum)
где nextsun
был получен из nextfri
Код приведен в кратком справочнике зоопарка, заменив 5 (для пятницы) на 0 (для воскресенья).
Это полные недели. Это только показывает вам дату самого последнего наблюдения. Увидеть ?endpoints
(apply.weekly
, по сути является тонкой оберткой для конечных точек).
apply.weekly
function (x, FUN, ...)
{
ep <- endpoints(x, "weeks")
period.apply(x, ep, FUN, ...)
}
<environment: namespace:xts>
С? Конечных точек
конечные точки возвращают числовой вектор, соответствующий последнему наблюдению в каждом периоде, указанном в on, с нулем, добавленным в начало вектора, и индексом последнего наблюдения в x в конце.
Допустимые значения для аргумента: "us" (микросекунды), "микросекунды", "мс" (миллисекунды), "миллисекунды", "секунды" (секунды), "секунды", "минуты" (минуты), "минуты" "," Часы "," дни "," недели "," месяцы "," кварталы "и" годы ".
Ответ на ваш второй вопрос - нет, нет возможности сделать это. Но вы всегда можете отредактировать последнюю дату вручную, если вы собираетесь представить все данные в любом случае, я не вижу в этом никакого вреда.
Нет, ты не можешь заставить это дать тебе воскресенье.
Поскольку индекс результата 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)))