#r #list #inner-join #quantmod
Вопрос:
Я использую R и библиотеку quantmod
для импорта данных в виде:
getSymbols("TMUS",from="2020-05-21", src="yahoo",frequency = "daily", format = "%Y-%m-%d")
getSymbols("AAPL",from="2020-05-21", src="yahoo",frequency = "daily", format = "%Y-%m-%d")
а затем я хочу вывести их из списка и указать им столбец с датой:
TMUS<- as.vector(unlist(TMUS$TMUS.Close)) %>% as_tibble() %>% add_column(date=index(TMUS),.before=1)
AAPL<- as.vector(unlist(AAPL$AAPL.Close)) %>% as_tibble() %>% add_column(date=index(AAPL),.before=1)
и, наконец, внутренне присоединяйтесь к ним, чтобы создать уникальную базу данных:
data <- TMUS %>%
inner_join(.,AAPL, by = "date")
Проблема в том, что внутреннее соединение умножает количество строк. Я считаю, что причина в том, что оба TMUS
и AAPL
являются списками. Я попытался удалить их с помощью as.vector(unlist(.))
, но они все еще являются списками.
Есть ли способ получить внутреннее объединение набора данных без умножения строк?
Комментарии:
1. Пожалуйста, подтвердите, что вы также используете
zoo
.2. На самом деле я не использую zoo, но я предполагаю, что он может быть импортирован quantmod
3. Опечатка:
index(APPL)
?4. Исправлено, спасибо!
5. Здесь ничего
list
нет , все они"data.frame"
(изgetSymbols
) илиc("tbl_df","tbl","data.frame")
(из вашегоas.vector(...)
потока). Когда я бегуinner_join
, я начинаю с 253 строк в каждой и заканчиваю всего 253 строками, я не вижу вашего «умножения строк» . (inner_join
работает только сdata.frame
подобными объектами, включая тибблы, он не будет работать с векторами, поэтомуunlist(.)
не подходит для использования.)
Ответ №1:
Попробуйте выполнить следующее (или используйте объявление вместо Cl, если вы хотите скорректировать закрытие). AAPL
, TMUS
и both
будут объектами xts. Если вам нужны только даты, для которых есть данные в обеих сериях, используйте na.omit(both)
.
library(quantmod)
getSymbols(c("AAPL", "TMUS"))
both <- cbind(Cl(AAPL), Cl(TMUS))
Если у вас много акций, попробуйте этот подход:
getSymbols(c("AAPL", "TMUS"), env = e <- new.env())
both <- do.call("cbind", eapply(e, Cl))