Search code examples
rquantmod

Loop to transform xts into dataframe


I am using the package quantmod to get historical share prices.

I want to create a loop to pull back the prices and as part of the loop I want to create a dataframe for each share. I have been unsuccessful so far with the below code, it gets the share prices as expected but this is returned as a xts object whereas I require the information as a dataframe - the as.data.frame part of the code doesn't do anything...

library(quantmod)
shares<-c("BARC.L", "BP.L", "DLG.L")

for(i in 1:length(shares)){

#gets share prices
getSymbols((paste(shares[i])), from = "2018-01-01")

#put the data into a dataframe (doesn't work).
shares[i]<-as.data.frame(shares[i])
}

The end result that I want is 3 dataframes - 1 for each share.

Can anyone suggest modifications to the code to achieve this please?


Solution

  • Firstly, I suggest you use the help() function that comes with R packages if you're not already doing so. I noticed in help(getSymbols) that you need to set env=NULL to actually return the data. With that, I've also made a list object so you can store the data as data.frames like you requested:

    library(quantmod)
    shares<-c("BARC.L", "BP.L", "DLG.L")
    
    # initialize a list to store your data frames
    df_list <- as.list(rep(data.frame(), length(shares))) 
    
    for (i in 1:length(shares)) {
        #gets share prices
        df_list[[i]] <- as.data.frame(getSymbols(shares[i], from = "2018-01-01", env=NULL))
    }
    
    # so you can access by name, e.g. df_list$DLG.L
    names(df_list) <- shares