簡體   English   中英

從R讀取許多Excel文件

[英]Read many Excel files from R

這是我第一次使用R,所以也許這個問題很簡單

我需要從url從xls文件下載日期,每個文件應該在一個數據框中。 喜歡這里

我決定使用gdata包(包'xlsReadWrite'不適用於R版本3.1.0,RODBC不適用於win64)

下載適用於一個文件(年份,例如= 2013)

readxls<-function()
{
  library("gdata")
  link<-paste0("http://nbp.pl/kursy/archiwum/archiwum_tab_a_",year,".xls")
  xlsdata <<- read.xls(link, sheet = 1, perl = "C:\\Perl64\\bin\\perl.exe", header=TRUE) 
}

我嘗試使用循環將許多.xls讀入list()。 (例如y_begin = 2012,y_end = 2014)

readxls<-function()
{
  library("gdata")

  ldata<<- list()
  j=1
  for (i in y_begin:y_end)
  {
    link<-paste0("http://nbp.pl/kursy/archiwum/archiwum_tab_a_",i,".xls")
    xlsdata <<- read.xls(link, sheet = 1, perl = "C:\\Perl64\\bin\\perl.exe", header=TRUE) 

    ldata[j] <<- xlsdata
    j<-j+1
  }
}

我認為之后我能夠合並它們,但不知道如何從列表中的單個數據幀獲取數據,例如> View(ldata [2])僅返回第一列

避免for循環,特別是其副作用。 最好在這里使用lapply 這是做事的R方式(函數式編程)。 我會這樣做:

library(gdata)
readxls<-function()
{
  ids <- seq(y_begin,y_end)
  links <-paste0("http://nbp.pl/kursy/archiwum/archiwum_tab_a_",ids,".xls")

  lapply (links,function(i)
     read.xls(link, sheet = 1, perl = "C:\\Perl64\\bin\\perl.exe", header=TRUE) 
  )
}

這將返回data.frame列表,以合並它們,假設它們是相同的:

ll <- readxls()
do.call(rbind,ll)

非常感謝你,但答案更容易。 它應該制作ldata [[j]]

readxls<-function()
{
  library("gdata")

  ldata<<- list()
  j=1
  for (i in y_begin:y_end)
  {
    link<-paste0("http://nbp.pl/kursy/archiwum/archiwum_tab_a_",i,".xls")
    xlsdata <<- read.xls(link, sheet = 1, perl = "C:\\Perl64\\bin\\perl.exe", header=TRUE) 

    ldata[[j]] <<- xlsdata
    j<-j+1
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM