为了账号安全,请及时绑定邮箱和手机立即绑定

将Excel工作簿中的所有工作表读入带有data.frames的R列表中

/ 猿问

将Excel工作簿中的所有工作表读入带有data.frames的R列表中

慕尼黑8549860 2019-11-11 10:37:48

我知道XLConnect可以将Excel工作表读入R。例如,这将读取工作簿中称为test.xlsR 的第一个工作表。


library(XLConnect)

readWorksheetFromFile('test.xls', sheet = 1)

我有一个包含多个工作表的Excel工作簿。


如何将工作簿中的所有工作表导入R中的列表中,其中列表的每个元素都是给定工作表的data.frame,并且每个元素的名称与Excel中工作表的名称相对应?


查看完整描述

3 回答

?
慕勒3428872

使用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文件作为参数,并将每个工作表作为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')


查看完整回答
反对 回复 2019-11-11
?
饮歌长啸

请注意,大多数XLConnect功能已被矢量化。这意味着您可以通过一个函数调用来读取所有工作表,而不必进行显式矢量化:


require(XLConnect)

wb <- loadWorkbook(system.file("demoFiles/mtcars.xlsx", package = "XLConnect"))

lst = readWorksheet(wb, sheet = getSheets(wb))

使用XLConnect 0.2-0,lst将已经是一个命名列表。


查看完整回答
反对 回复 2019-11-11
?
当年话下

我偶然发现了这个老问题,但我认为最简单的方法仍然缺失。


您可以只用rio一行代码来导入所有Excel工作表。


library(rio)

data_list <- import_list("test.xls")

如果您是的爱好者,则tidyverse可以通过将setclass参数添加到函数调用中来轻松地将它们作为小标题导入。


data_list <- import_list("test.xls", setclass = "tbl")

假设它们具有相同的格式,则可以通过将rbind参数设置为来轻松行绑定它们TRUE。


data_list <- import_list("test.xls", setclass = "tbl", rbind = TRUE)


查看完整回答
反对 回复 2019-11-11
  • 3 回答
  • 0 关注
  • 37 浏览
我要回答

相关问题推荐

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信