Регулярный анализ по нерегулярным временным рядам
У меня нерегулярный временной ряд (xts
в R
) к которому я хочу применить временные окна. Например, учитывая временной ряд, подобный следующему, я хочу вычислить такие вещи, как количество наблюдений в каждом дискретном 3-часовом окне, начиная с 2009-09-22 00:00:00
:
library(lubridate)
s <- xts(c("OK", "Fail", "Service", "OK", "Service", "OK"),
ymd_hms(c("2009-09-22 07:43:30", "2009-10-01 03:50:30",
"2009-10-01 08:45:00", "2009-10-01 09:48:15",
"2009-11-11 10:30:30", "2009-11-11 11:12:45")))
Я, видимо, не могу использовать period.apply()
или же split()
сделать это, потому что те пропустят периоды без наблюдений, и я не могу дать ему время начала.
Мой желаемый результат для простой задачи подсчета (хотя, конечно, мои реальные задачи более сложны с каждым сегментом!) Был бы примерно таким, если бы я агрегировал 3 дня за раз:
2009-09-22 1
2009-09-25 0
2009-09-28 0
2009-10-01 3
2009-10-04 0
2009-10-07 0
2009-10-10 0
2009-10-13 0
2009-10-16 0
2009-10-19 0
2009-10-22 0
2009-10-25 0
2009-10-28 0
2009-10-31 0
2009-11-03 0
2009-11-06 0
2009-11-09 2
Спасибо за любое руководство.
1 ответ
Использование align.time
поставить указатель s
в периоды, которые вас интересуют. Затем используйте period.apply
найти длину каждого 3-часового окна. Затем объедините его с пустым объектом XTS, который имеет все значения индекса, которые вы хотите.
# align index into 3-hour blocks
a <- align.time(s, n=60*60*3)
# find the number of obs in each block
count <- period.apply(a, endpoints(a, "hours", 3), length)
# create an empty xts object with the desired index
e <- xts(,seq(start(a),end(a),by="3 hours"))
# merge the counts with the empty object and fill with zeros
out <- merge(e,count,fill=0)