代码之家  ›  专栏  ›  技术社区  ›  user6883405

for loop in r从url导入多个csv

  •  0
  • user6883405  · 技术社区  · 6 年前

    我正在导入500个csv,它们具有以下类似格式:

    “。” https://www.quandl.com/api/v3/datasets/WIKI/stockname/data.csv?column_index=11&transform=rdiff&api_key=keyname “。”

    其中stockname是单个股票的股票代码。我有一个名为stock list的数据框中保存的股票代码列表。

    我想用lapply遍历我的股票列表。以下是我目前掌握的情况:

    lst <- lapply(stocklist, function(i){
      url <- paste0("https://www.quandl.com/api/v3/datasets/WIKI/",i,"/data.csv?column_index=11&transform=rdiff&api_key=XXXXXXXXXXXXXXX")
      spdata <- read.csv(url, stringsAsFactors = FALSE)
    
    })
    

    我得到以下错误:

    Error in file(file, "rt") : invalid 'description' argument
    

    是什么导致了这个错误?我也尝试过使用for循环,但是没有成功,我被告知lapply是r中处理这类任务的更好方法。

    编辑:

    库存结构:

    > dput(droplevels(head(stocklist)))
    structure(list(`Ticker symbol` = c("MMM", "ABT", "ABBV", "ABMD", 
    "ACN", "ATVI")), .Names = "Ticker symbol", row.names = c(NA, 
    6L), class = "data.frame")
    

    第二次编辑(解决方案):

    stockdata<-lapply(paste0("https://www.quandl.com/api/v3/datasets/WIKI/",stocklist[1][[1]],"/data.csv?column_index=11&transform=rdiff&api_key=XXXXXXX"),read.csv,stringsAsFactors=FALSE)
    

    向stockdata添加名称:

    names(stockdata)<-stocklist[1][[1]]
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Kapocsi    6 年前

    我相信你的“i”变量是一个向量。

    确保正确地编写子脚本,并且一次只传递一个股票。

    这: i 会像这样: i[x]

        2
  •  0
  •   ryguy72    6 年前

    我不知道我是什么,但我猜是个数字。你能试试这个看看是否适合你吗?我觉得很接近。只需确保url与从中获取数据的实际url的模式匹配即可。我试图找到它,但找不到。

    seq <- c(1:10)
    
    for (value in seq) {
    
    mydownload <- function (start_date, end_date) {
      start_date <- as.Date(start_date)  ## convert to Date object
      end_date <- as.Date(end_date)  ## convert to Date object
      dates <- as.Date("1970/01/01") + (start_date : end_date)  ## date sequence
      ## a loop to download data
      for (i in 1:length(dates)) {
        string_date <- as.character(dates[i])
        myfile <- paste0("C:/Users/Excel/Desktop/", string_date, ".csv")
        string_date <- gsub("-", "-", string_date)  ## replace "-" with "/"
        myurl <- paste("https://www.quandl.com/api/v3/datasets/WIKI/", i, "/data.csv?column_index=11&transform=rdiff&api_key=xxxxxxxxxx", sep = "")
        download.file(url = myurl, destfile = myfile, quiet = TRUE)
        }
      }
    
    }