Как преобразовать очень большой набор данных в XTS?- as.xts терпит неудачу на 1.5M строках - PullRequest
0 голосов
/ 10 июня 2018

У меня есть данные:

dput(head(data))

> dput(head(data))
structure(list(Gmt.time = c("01.06.2015 00:00", "01.06.2015 00:01", 
"01.06.2015 00:02", "01.06.2015 00:03", "01.06.2015 00:04", "01.06.2015 00:05"
), Open = c(0.88312, 0.88337, 0.88377, 0.88412, 0.88393, 0.8838
), High = c(0.88337, 0.88378, 0.88418, 0.88418, 0.88393, 0.88393
), Low = c(0.883, 0.88337, 0.88374, 0.88394, 0.88368, 0.88362
), Close = c(0.88337, 0.88375, 0.88412, 0.88394, 0.8838, 0.88393
), Volume = c(83.27, 100.14, 117.18, 52.53, 77.69, 91.63)), .Names = c("Gmt.time", 
"Open", "High", "Low", "Close", "Volume"), row.names = c(NA, 
6L), class = "data.frame")
> 

и никаких значений NA

any(is.na(head(data)))
[1] FALSE

, если я выполню это на первых нескольких элементах, как в предоставленных данных:

data_xts <- xts(head(data[,2:6]), as.POSIXct(head(data[,1]), format='%d.%m.%Y %H:%M'))

работает нормально

, но если я запускаю полный набор данных

> nrow(data)
[1] 1581120

я получаю:

> data_xts <- xts(data[,2:6], as.POSIXct(data[,1], format='%d.%m.%Y %H:%M'))
Error in xts(data[, 2:6], as.POSIXct(data[, 1], format = "%d.%m.%Y %H:%M")) : 
  'order.by' cannot contain 'NA', 'NaN', or 'Inf'

1 Ответ

0 голосов
/ 18 июня 2018

Если ваши временные метки указаны в GMT, как следует из названия столбца, то as.POSIXct(data[,1], format='%d.%m.%Y %H:%M') может возвращать NA, поскольку часовой пояс не был установлен в UTC и по умолчанию предполагается местный часовой пояс.У вас может быть временная метка, которая не существует в местном часовом поясе, которая будет возвращать NA.Т.е. попробуйте as.POSIXct(data[,1], format='%d.%m.%Y %H:%M', tz = "GMT").

Я предполагаю, что первая запись, возвращающая NA, содержит метку времени в течение часа, который пропускается из-за изменений летнего времени (т. Е. Не существует) в вашем местном часовом поясе;как описано здесь .

...