导入包含多个工作表的Excel工作簿

3

我想要将一个包含多个工作表的Excel工作簿导入R中。然而,我似乎无法做到这一点。我一直使用的代码如下:

library(XLConnect)
# Read Excel Sheet
excel <- loadWorkbook("C:/Users/rawlingsd/Downloads/17-18 Prem Stats.xlsx")
# get sheet names
sheet_names <- getSheets(excel)
names(sheet_names) <- sheet_names
# put sheets into a list of data frames
sheet_list <- lapply(sheet_names, function(.sheet){readWorksheet(object=excel, .sheet)})
# limit sheet_list to sheets with at least 1 dimension 
# sheet_list2 <- sheet_list[sapply(sheet_list, function(x) dim(x)[1]) > 0]
# code to read in each excel worksheet as individual dataframes
for (i in 1:length(sheet_list)){assign(paste0("2018df", i), as.data.frame(sheet_list[i]))}
# define function to clean data in each data frame (updated based on your data)

如果有人能够帮助我调试代码或者分享一份可行的代码,我会非常感激。

你没有描述这个程序为什么不能工作。你能加上你收到的任何错误信息吗?你期望得到什么输出,它与你当前得到的有什么不同? - r.bot
4个回答

10
你可以使用readxl包。请参考以下示例。
library(readxl)
path <- readxl_example("datasets.xls")
sheetnames <- excel_sheets(path)
mylist <- lapply(excel_sheets(path), read_excel, path = path)

# name the dataframes
names(mylist) <- sheetnames

电子表格将以工作表的名称作为列表中数据框的名称进行捕获。
如果您想将数据框从列表中取出,请使用下面的代码。
# Bring the dataframes to the global environment
list2env(mylist ,.GlobalEnv)

非常感谢!那太完美了。 - Daniel Rawlings

9
请查看openxlsx包,它允许您在Excel工作簿中做很多事情。 以下是一个读取给定工作簿中所有表格的代码脚本。
library(openxlsx)
a <- loadWorkbook('~/filename.xlsx')
sheetNames <- sheets(a)
for(i in 1:length(sheetNames))
{
  assign(sheetNames[i],readWorkbook(a,sheet = i))
}

你可以在R中验证数据是否已加载并在你的工作空间中查看。
谢谢。

3

我使用的工具:

full_excel_read<-function(fpath,v=TRUE){



 sheetnames <- excel_sheets(fpath)
  workbook <- sapply(sheetnames,function (x){readxl::read_excel(fpath,sheet = x)})
  for (sh in sheetnames) {
    workbook[[sh]]<-as.data.table(workbook[[sh]])
  }
  if (v){
    lapply(sheetnames, function(x){View(workbook[[x]],x)})
  }


  workbook
}

2

请查看将Excel工作簿中的所有工作表读入R列表并生成数据框

require(XLConnect)
wb <- loadWorkbook(system.file("demoFiles/mtcars.xlsx", package = "XLConnect"))
lst <- readWorksheet(wb, sheet = getSheets(wb))

lst 是一个命名列表,其名称对应于工作表名称。请注意,readWorksheet 是向量化的,因此您可以使用单个 readWorksheet 调用读取多个工作表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接