将Excel工作簿中的所有工作表都读取到一个包含数据框的R列表中。
将Excel工作簿中的所有工作表都读取到一个包含数据框的R列表中。
我知道可以使用XLConnect
将Excel工作表导入R中。例如,这将读取名为test.xls
的工作簿中的第一个工作表到R中。
library(XLConnect) readWorksheetFromFile('test.xls', sheet = 1)
我有一个包含多个工作表的Excel工作簿。
如何将工作簿中的所有工作表导入R中的一个列表中,其中列表的每个元素都是一个特定工作表的数据框,并且每个元素的名称对应于Excel中工作表的名称?
admin 更改状态以发布 2023年5月22日
更新的答案使用readxl (2015年6月22日)
自从发布这个问题以来,已经推出了readxl
包。它支持xls
和xlsx
格式。与其他excel导入包不同的是,它可以在Windows、Mac和Linux上使用,而不需要安装其他软件。
因此,导入Excel工作簿中的所有工作表的函数如下:
library(readxl) read_excel_allsheets <- function(filename, tibble = FALSE) { # I prefer straight data.frames # but if you like tidyverse tibbles (the default with read_excel) # then just pass tibble = TRUE sheets <- readxl::excel_sheets(filename) x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X)) if(!tibble) x <- lapply(x, as.data.frame) names(x) <- sheets x }
这可以这样调用:
mysheets <- read_excel_allsheets("foo.xls")
旧答案
在@mnel提供的答案的基础上,这里有一个简单的函数,它以Excel文件作为参数,并将每个工作表作为命名列表中的数据框返回。
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')