Подтвердить что ты не робот

Преобразование фрейма данных в 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

Это самый простой пример, который я могу придумать, поэтому он довольно разочаровывает, не заставляя его работать... Любая помощь приветствуется!

4b9b3361

Ответ 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)