【问题标题】:API Call per Column in RR中每列的API调用
【发布时间】:2016-05-11 08:16:44
【问题描述】:

我在数据框中有一列包含股票代码,例如 AAPL(代表 Apple)、TWTR(代表 Twitter)等等。我想根据数据框中的股票代码数量创建新列,并用将从 API 检索的收盘价填充这些列。结果应如下所示:Click here for the expected output

但是,当我运行下面的代码时,它会显示警告和错误,因为列之间的行数不同。有没有人解决这个问题?

library(Quandl)

portfolio <- data.frame(Code=c("AAPL", "TWTR", "MSFT"),
                    stringsAsFactors=FALSE)


analytic <- function(pf, startDate) {
  z <- do.call(cbind.data.frame, lapply(seq(1:nrow(pf)), function(x) {
   API <- Quandl(paste0("WIKI/", pf$Code[x]),
              type = "raw", 
              start_date = startDate, 
              end_date=Sys.Date())
   ValuebyDate <- API[,c("Date", "Close")]
   return(ValuebyDate)
}))
return(z)
}

analytic(portfolio, "2016-01-01")

【问题讨论】:

    标签: r api quandl


    【解决方案1】:

    这是使用不同方法解决问题的另一种方法。

    rm(list=ls())
    library(tseries)
    portfolio <- data.frame(Code=c("AAPL", "TWTR", "MSFT"),
                    stringsAsFactors=FALSE)
    startDate = "2016-01-04"
    
    getHistData <- function(x){
    
      ts <- get.hist.quote(instrument = portfolio$Code[x], start = startDate, end = Sys.Date(),
                                          quote = "Close", provider = "yahoo", retclass = "zoo")
      names(ts) <- portfolio$Code[x]
      head(ts)
      return(ts)
    }
    
    ts1 = getHistData(1)
    head(ts1)
    ts2 = getHistData(2)
    head(ts2)
    ts3 = getHistData(3)
    head(ts3)
    
    cbind(ts1,ts2,ts3)
    

    更新:这将允许您在不手动运行 ts1、ts2、ts3 的情况下构建表

    library(zoo)
    stockPrice <- zoo()
    
    for (i in 1: length(portfolio$Code)) {
      ts <- getHistData(i)
      stockPrice <- zoo(merge(ts, stockPrice, all=TRUE))
    }
    
    head(stockPrice)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 2020-11-03
      相关资源
      最近更新 更多