Как я могу удалить данные NA, ежедневно загружаемые из Yahoo Finance, с помощью функции getsymbols? - PullRequest
0 голосов
/ 07 января 2019
Underlyings <- c ("AMZN", "ALV.DE", "BMW.DE")
getsymbols(Underlyings, from = "", to = "")

теперь цикл if или for для устранения существующих NA?

1 Ответ

0 голосов
/ 07 января 2019

Что вы можете сделать, это использовать lapply и использовать это для вызова getSymbols с na.omit вокруг него. Теперь, когда вы вызываете getSymbols, объект будет помещен непосредственно в вашу среду, и na.omit не сможет найти что-либо для своей работы, но вы не получите предупреждение / ошибку. Если вы используете auto.assign = FALSE при использовании getSymbols, вы можете присвоить значения самостоятельно, и возвращаемый результат из getSymbols может быть передан в na.omit. Вы по-прежнему будете получать предупреждение о том, что SAF.PA имеет пустые значения, но в списке значения будут удалены.

РЕДАКТИРОВАТЬ на основе скрипта github

Одна из акций (EI.PA) в списке акций выдает ошибку, которую нельзя загрузить. Я добавил try вокруг функции, чтобы поймать это, чтобы оно продолжалось со следующей акции.

library(quantmod)
underlyings <- c("^STOXX50E", "ALV.DE", "G.MI", "BMW.DE", "SU.PA", "ENI.MI", "IBE.MC", "ORA.PA", "DBK.DE",
             "BAYN.DE", "ENEL.MI", "AI.PA", "DTE.DE", "BN.PA", "SAF.PA", "BBVA.MC","PHIA.AS", 
             "OR.PA", "ASML.AS", "DPW.DE", "AIR.PA", "BNP.PA", "INGA.AS", "ENGI.PA", "ABI.BR", 
             "EI.PA", "SAN.PA", "CA.PA", "ITX.MC", "MC.PA", "FRE.DE")

my_data <- lapply(underlyings, function(x) try(na.omit(getSymbols(x, from="2016-01-01", to="2019-01-08", auto.assign = FALSE))))
names(my_data) <- underlyings

sapply(my_data, function(x) sum(is.na(x)))

Warning: EI.PA download failed; trying again.
Error : EI.PA download failed after two attempts. Error message:
HTTP error 404.
In addition: Warning messages:
1: ^STOXX50E contains missing values. Some functions will not work if objects contain missing values in the middle of the series. Consider using na.omit(), na.approx(), na.fill(), etc to remove or replace them. 
2: SU.PA contains missing values. Some functions will not work if objects contain missing values in the middle of the series. Consider using na.omit(), na.approx(), na.fill(), etc to remove or replace them. 
3: SAF.PA contains missing values. Some functions will not work if objects contain missing values in the middle of the series. Consider using na.omit(), na.approx(), na.fill(), etc to remove or replace them. 
4: ASML.AS contains missing values. Some functions will not work if objects contain missing values in the middle of the series. Consider using na.omit(), na.approx(), na.fill(), etc to remove or replace them. 
Warning message:
SAN.PA contains missing values. Some functions will not work if objects contain missing values in the middle of the series. Consider using na.omit(), na.approx(), na.fill(), etc to remove or replace them. 

# show number of empty values
sapply(my_data, function(x) sum(is.na(x)))

sapply(my_data, function(x) sum(is.na(x)))
^STOXX50E    ALV.DE      G.MI    BMW.DE     SU.PA    ENI.MI    IBE.MC    ORA.PA    DBK.DE   BAYN.DE   ENEL.MI     AI.PA    DTE.DE 
        0         0         0         0         0         0         0         0         0         0         0         0         0 
    BN.PA    SAF.PA   BBVA.MC   PHIA.AS     OR.PA   ASML.AS    DPW.DE    AIR.PA    BNP.PA   INGA.AS   ENGI.PA    ABI.BR     EI.PA 
        0         0         0         0         0         0         0         0         0         0         0         0         0 
   SAN.PA     CA.PA    ITX.MC     MC.PA    FRE.DE 
        0         0         0         0         0 

Чтобы удалить ошибки из списка:

my_data[which(sapply(my_data, function(x) inherits(x, "try-error")) == TRUE)] <- NULL

# to create one big xts object:
my_big_xts <- Reduce(cbind, my_data)

Но если вы хотите, чтобы в tidy data.frame было несколько тикеров, возможно, вы захотите взглянуть на пакет tidyquant.

...