使用data.frames将Excel工作簿中的所有工作表读取到R列表中
我知道可以使用XLConnect
将Excel工作表读入R.例如,这将读取名为test.xls
的工作簿中的第一个工作表导入R.
library(XLConnect) readWorksheetFromFile('test.xls', sheet = 1)
我有一个Excel工作簿与多个工作表。
如何将工作簿中的所有工作表导入到R中的列表中,其中列表中的每个元素都是给定工作表的data.frame,每个元素的名称与Excel中工作表的名称相对应?
请注意,大部分XLConnect的function已经被vector化了。 这意味着您可以使用一个函数调用读取所有工作表,而无需执行显式vector化:
require(XLConnect) wb <- loadWorkbook(system.file("demoFiles/mtcars.xlsx", package = "XLConnect")) lst = readWorksheet(wb, sheet = getSheets(wb))
随着XLConnect 0.2-0 lst将已经是一个名单。
使用readxl更新答案(2015年6月22日)
自发布这个问题以来, readxl
软件包已经发布。 它支持xls
和xlsx
格式。 重要的是,与其他Excel导入包相比,它可以在Windows,Mac和Linux上工作,而无需安装额外的软件。
因此,导入Excel工作簿中所有工作表的function是:
library(readxl) read_excel_allsheets <- function(filename) { sheets <- readxl::excel_sheets(filename) x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X)) names(x) <- sheets x }
这可以被称为:
mysheets <- read_excel_allsheets("foo.xls")
老答案
build立在@mnel提供的答案上,这是一个简单的函数,它将Excel文件作为参数,并将每个工作表作为一个data.frame返回到一个已命名的列表中。
library(XLConnect) importWorksheets <- function(filename) { # filename: name of Excel file workbook <- loadWorkbook(filename) sheet_names <- getSheets(workbook) names(sheet_names) <- sheet_names sheet_list <- lapply(sheet_names, function(.sheet){ readWorksheet(object=workbook, .sheet)}) }
因此,它可以被称为:
importWorksheets('test.xls')
您可以加载工作簿,然后使用lapply
, getSheets
和readWorksheet
并执行类似的操作。
wb.mtcars <- loadWorkbook(system.file("demoFiles/mtcars.xlsx", package = "XLConnect")) sheet_names <- getSheets(wb.mtcars) names(sheet_names) <- sheet_names sheet_list <- lapply(sheet_names, function(.sheet){ readWorksheet(object=wb.mtcars, .sheet)})
excel.link将完成这项工作。
实际上我发现与XLConnect相比更容易使用(不是那个包很难使用)。 两者的学习曲线约为5分钟。
另外,通过浏览http://cran.r-project.org/web/packages/available_packages_by_name.html ,您可以轻松find所有提到“Excel”这个单词的R包。
我尝试了以上,并有我的20MB Excel我需要转换的数据量包括的问题; 因此上述不适合我。
经过更多的研究,我偶然发现了openxlsx,这个终于做了(而且快)把一个大的xlsx文件导入R?
https://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf