R загружать и читать многие файлы Excel автоматически

Мне нужно каждый день загружать несколько сотен файлов 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 как отдельные фреймы данных.


person Thorst    schedule 02.10.2013    source источник


Ответы (1)


Трудно ответить на ваш вопрос, поскольку вы не предоставили воспроизводимый пример, и неясно, чего именно вы хотите. В любом случае, приведенный ниже код должен указать вам правильное направление.

  1. У вас есть список URL-адресов, которые вы хотите посетить:

    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.

person csgillespie    schedule 02.10.2013