0

我每天需要下载数百个 excel 文件并将它们导入 R。每个都应该是他们自己的数据框。我有一个.csv。包含所有地址的文件(地址保持静态)。

.csv。文件如下所示:

http://www.www.somehomepage.com/chartserver/hometolotsoffiles%a
http://www.www.somehomepage.com/chartserver/hometolotsoffiles%b
http://www.www.somehomepage.com/chartserver/hometolotsoffiles%a0
http://www.www.somehomepage.com/chartserver/hometolotsoffiles%aa11
etc.....

我可以用这样的单个文件来做到这一点:

library(XLConnect)

my.url <- "http://www.somehomepage.com/chartserver/hometolotsoffiles%a"

loc.download <- "C:/R/lotsofdata/" # each files probably needs to have their own name here? 

download.file(my.url, loc.download, mode="wb")

df.import.x1 = readWorksheetFromFile("loc.download", sheet=2)) 

# This kind of import works on all the files, if you ran them individually

但我不知道如何下载每个文件,并将其单独放在一个文件夹中,然后将它们全部导入 R 作为单独的数据框。

4

1 回答 1

3

很难回答您的问题,因为您没有提供可重复的示例,并且不清楚您到底想要什么。无论如何,下面的代码应该为您指明正确的方向。

  1. 您有一个要访问的网址列表:

    urls = c("http://www/chartserver/hometolotsoffiles%a",
                 "http://www/chartserver/hometolotsoffiles%b")
    

    在您的示例中,您从 csv 文件加载它

  2. 接下来我们下载每个文件并将其放在单独的目录中(您在问题中提到过

    for(url in urls) {
      split_url = strsplit(url, "/")[[1]]
      ##Extract final part of URL
      dir = split_url[length(split_url)]
      ##Create a directory
      dir.create(dir)
      ##Download the file
      download.file(url, dir, mode="wb")
    }
    
  3. 然后我们遍历目录和文件并将结果存储在列表中。

    ##Read in files
    l = list(); i = 1
    dirs = list.dirs("/data/", recursive=FALSE)
    for(dir in dirs){
      file = list.files(dir, full.names=TRUE)
      ##Do something?
      ##Perhaps store sheets as a list
      l[[i]] = readWorksheetFromFile(file, sheet=2)
      i = i + 1
    }
    

我们当然可以将第二步和第三步合并为一个循环。或删除循环并使用sapply.

于 2013-10-02T14:04:22.897 回答