Преобразование фрейма данных в xts
Я пытаюсь преобразовать фрейм данных в объект xts с помощью метода as.xts(). Вот мой входной кадр q:
q
t x
1 2006-01-01 00:00:00 1
2 2006-01-01 01:00:00 2
3 2006-01-01 02:00:00 3
str(q)
'data.frame': 10 obs. of 2 variables:
$ t: POSIXct, format: "2006-01-01 00:00:00" "2006-01-01 01:00:00" "2006-01-01 02:00:00" "2006-01-01 03:00:00" ...
$ x: int 1 2 3 4 5 6 7 8 9 10
Результат:
> as.xts(q)
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
Это самый простой пример, который я могу придумать, поэтому он довольно разочаровывает, не заставляя его работать... Любая помощь приветствуется!
Ответы
Ответ 1
Это четко документировано --- xts и zoo формируются путем предоставления двух аргументов, данных vector
или matrix
и Date
, POSIXct
, chron
,... типа, предоставляющих информацию о времени (или в случае zoo порядок).
Итак, сделайте что-нибудь вроде
qxts <- xts(q[,-1], order.by=q[,1])
и вы должны быть установлены.
Ответ 2
Ну, as.xts предполагает по умолчанию, что даты хранятся в именах ростов data.frame. Отсюда сообщение об ошибке. Быстрое и грязное исправление:
rownames(q) = q[1]
as.xts(q)
Но вы получите дополнительный столбец с строкой дат. В идеале вы должны были бы построить data.frame с датами как названия ростов, чтобы начать с.
Ответ 3
Здесь используется решение с использованием пакета tidyquant
, который содержит функцию as_xts()
, которая принудительно привязывает кадр данных к объекту xts. Он также содержит as_tibble()
, чтобы принуждать объекты xts к тиблям ( "аккуратные" кадры данных).
Восстановите фрейм данных (обратите внимание, что класс даты-времени используется в "аккуратных" кадрах данных, но может использоваться любой однозначный класс даты или даты):
> q
# A tibble: 3 × 2
t x
<dttm> <dbl>
1 2006-01-01 00:00:00 1
2 2006-01-01 01:00:00 2
3 2006-01-01 02:00:00 3
Используйте as_xts()
для преобразования в класс "xts". Укажите аргумент date_col = t
, чтобы назначить столбец "t" в качестве дат для использования в качестве имен строк:
> library(tidyquant)
> as_xts(q, date_col = t)
x
2006-01-01 00:00:00 1
2006-01-01 01:00:00 2
2006-01-01 02:00:00 3
Возврат - это объект xts
с правильной датой или датами в именах строк.
Ответ 4
Вот возможное решение:
library(timetk)
q <- xts::xts(q[,-1], order.by = q$t)