Есть ли способ разделить объект временного ряда xts в определенный момент времени

#r #time-series #xts

#r #временные ряды #xts

Вопрос:

Я пытаюсь разделить данные временных рядов цен на нефть, охватывающие 35 лет в определенный год. Например, все данные до 2018 года в одну серию, а более поздние данные в другую. Могу ли я использовать split() функцию для выполнения того же самого? Более подробная информация о временных рядах приведена ниже.

  > str(myxts)
  An ‘xts’ object on 1986-01-15/2020-09-15 containing:
  Data: num [1:417, 1] 22.9 15.5 12.6 12.8 15.4 ...
  Indexed by objects of class: [Date] TZ: UTC
  xts Attributes:  
  

Заранее спасибо.

Ответ №1:

Это создает объект xts с 2000/1/1 по 2002/9/26, а затем разбивает его на все до конца 2000 года и все, начиная с 2001 года.

 tt <- seq(as.Date("2000-01-01"), by = "day", length = 1000)
x <- xts(seq_along(tt), tt)
range(time(x))
## [1] "2000-01-01" "2002-09-26"

s <- split(x, as.yearmon(time(x)) >= 2001)

range(time(s[[1]]))
## [1] "2000-01-01" "2000-12-31"

range(time(s[[2]]))
## [1] "2001-01-01" "2002-09-26"
  

Комментарии:

1. Результатом функции разделения был список объектов зоопарка, которые я должен был преобразовать обратно в xts. Тем не менее, это сработало для меня. Спасибо!!

2. В вопросе не был указан вывод, кроме того, что он должен состоять из двух рядов. lapply(s, as.xts) преобразовал бы каждую серию в xts.