Принудительно полных недель с 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)))
Другие вопросы по тегам