xts split не работает должным образом в течение нескольких дней - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь разделить временные ряды хтс в окнах 90 дней. Я хочу, чтобы разделение началось с первого события временного ряда.

Вот некоторые примеры данных, иллюстрирующих проблему:

V1 <-as.Date(c('2014-01-16','2014-01-16','2014-01-16','2014-01-16','2014-01-16', '2014-03-24','2014-03-24','2014-03-24',
       '2014-05-12', '2014-05-12', '2014-05-12', '2014-05-12', '2014-05-26', '2014-05-26'))
data <- as.data.frame(V1)
data <- xts(data,order.by = data$V1)

Я ожидаю, что следующая команда выполнит работу, но это не так:

xts::split.xts(x=data,f="days",k=90)

Может быть, это не ошибка, а то, что xts должен разделять вещи, потому что он использует 1970-01-01 в качестве начальной точки разделения.

1 Ответ

0 голосов
/ 02 ноября 2018

В качестве обходного пути я использую следующую функцию:

# FUNCTION
split_xts <- function(x,units = c("mins", "hours", "days"),window_size) {

  # 'split.xts' does a good job for k = 1
  #   we use it to create some unit splits that we will aggregate
  data_split <- split.xts(x = x,f = units, k = 1)

  result <- list()
  aggregator <- NULL
  aggregator_start <- NULL
  for (s in data_split) {
    if (is.null(aggregator)) {
      aggregator <- s
      aggregator_start <- xts::first(aggregator)
      next
    }

    diff_test <-
      difftime(index(xts::first(s)),
               index(aggregator_start),
               units = units)
    # print(as.numeric(diff_test))

    # If the split is out of the authorized scope, 
    #  we close the aggregator and start a new one
    if (diff_test > window_size) {
      result[[length(result)+1]] <- aggregator
      aggregator <- s
      aggregator_start <- xts::first(aggregator)
    } else {
      aggregator <- rbind(aggregator,s)
    }

  }
  result[[length(result)+1]] <- aggregator

  return(result)
}
# TEST
data <- readRDS("xts_object_to_reproduce_split_pb.rds")
as.data.frame(data)[,"date_evt"]

V1 <-as.Date(c('2014-01-16','2014-01-16','2014-01-16','2014-01-16','2014-01-16', '2014-03-24','2014-03-24','2014-03-24',
               '2014-05-12', '2014-05-12', '2014-05-12', '2014-05-12', '2014-05-26', '2014-05-26'))
data <- as.data.frame(V1)
split_xts(data,units = "days",window_size = 30)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...