Добавление столбца символов в sample.xts приводит к приведению данных в ядро - PullRequest
0 голосов
/ 17 июня 2020

Я слежу за FAQ здесь: https://joshuaulrich.github.io/xts/xts_faq.html

Я делаю этот образец. Xts

sample.xts <- xts(1:6, as.POSIXct(c("2009-09-22 07:43:30",
  "2009-10-01 03:50:30", "2009-10-01 08:45:00", "2009-10-01 09:48:15",
  "2009-11-11 10:30:30", "2009-11-11 11:12:45")))
# align index into regular (e.g. 3-hour) blocks
aligned.xts <- align.time(sample.xts, n=60*60*3)
# apply your function to each block
count <- period.apply(aligned.xts, endpoints(aligned.xts, "hours", 3), length)
# create an empty xts object with the desired regular index
empty.xts <- xts(, seq(start(aligned.xts), end(aligned.xts), by="3 hours"))
# merge the counts with the empty object
head(out1 <- merge(empty.xts, count))

Затем я назначаю символ:

sample.xts <- as.xts(transform(sample.xts, Symbol="AAPL"))

> sample.xts
                    V1  Symbol
2009-09-22 07:43:30 "1" "AAPL"
2009-10-01 03:50:30 "2" "AAPL"
2009-10-01 08:45:00 "3" "AAPL"
2009-10-01 09:48:15 "4" "AAPL"
2009-11-11 10:30:30 "5" "AAPL"
2009-11-11 11:12:45 "6" "AAPL"

Моя проблема в том, что теперь все данные представляют собой строки.

Я предполагаю, что это связано с тем, что базовые данные представляют собой матрицу, поэтому все элементы данных должны быть одного типа. Есть ли представление coredata, которое позволяет мне иметь строковые символы, а также даты posix, а также двойники OHL C? Повторяется с data(sample_matrix):

> data(sample_matrix)
> sample.xts <- as.xts(sample_matrix)
> head(sample.xts)
               Open     High      Low    Close
2007-01-02 50.03978 50.11778 49.95041 50.11778
2007-01-03 50.23050 50.42188 50.23050 50.39767
2007-01-04 50.42096 50.42096 50.26414 50.33236
2007-01-05 50.37347 50.37347 50.22103 50.33459
2007-01-06 50.24433 50.24433 50.11121 50.18112
2007-01-07 50.13211 50.21561 49.99185 49.99185

> sample.xts$Symbol <- "AAPL"
Warning message:
In merge.xts(..., all = all, fill = fill, suffixes = suffixes) :
  NAs introduced by coercion

> head(sample.xts)
               Open     High      Low    Close Symbol
2007-01-02 50.03978 50.11778 49.95041 50.11778     NA
2007-01-03 50.23050 50.42188 50.23050 50.39767     NA
2007-01-04 50.42096 50.42096 50.26414 50.33236     NA
2007-01-05 50.37347 50.37347 50.22103 50.33459     NA
2007-01-06 50.24433 50.24433 50.11121 50.18112     NA
2007-01-07 50.13211 50.21561 49.99185 49.99185     NA

1 Ответ

0 голосов
/ 17 июня 2020

Вы правы, что как только вы добавите символ в xts, он превратится в матрицу символов. Если вы хотите иметь данные в data.frame (или tibble), вам необходимо преобразовать xts в data.frame.

Basi c способ, используя функции при загрузке xts (R 4.0) :

my_df <- data.frame(date = index(sample.xts), # gets the date index from the xts object
                    coredata(sample.xts), # gets the matrix from the xts object
                    symbol = "aapl")

При работе с несколькими акциями внутри data.frame используйте tq_get из tidyquant, чтобы получить данные, например, yahoo, tiin go или alphavantage.

Для переключения Между data.frame / tibble и xts пакет timetk имеет для этого всевозможные функции. tk_tbl преобразует матрицу xts в тиббл.

С обоими этими пакетами много виньеток до go сквозных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...