【问题标题】:Store contents of workbook to separate data.frames in a list将工作簿的内容存储到列表中的单独 data.frames
【发布时间】:2017-10-26 21:22:53
【问题描述】:

我正在尝试读取具有未知数量工作表的 Excel 工作簿,并将每个工作表存储为变量的一部分(结果 [1] 给出工作表 1,结果 [2] 给出工作表 2,等等)。我开始尝试使用 XLConnect 包(我可以在 Linux 上正常工作)找到一种方法。当我意识到我已经打破了几乎所有的 R 约定时,我停下来了……有人有更好的解决方案,使用 XLConnect 包吗?

require(XLConnect)

demoExcelFile <- system.file("demoFiles/multiregion.xlsx", package = "XLConnect")

endloop<<-F
x<<-1
result<<-NULL
while(!endloop){
  result[x] <<- tryCatch({
    readWorksheetFromFile(demoExcelFile,sheet=x)
    x<<-x+1
  }, error = function(e) {
    endloop<<-T
  })
}

注意:我对使用其他软件包持开放态度,只是找不到另一个可以在 64 位 Linux Mint 上可靠运行的软件包

【问题讨论】:

    标签: r excel xlconnect


    【解决方案1】:

    使用具有列出工作表名称功能的 readxl 包。

    library(readxl)
    library(purrr)
    
    # get the sheet names
    sheetnames  <- excel_sheets("path/to/myfile.xlsx")
    
    # loop through them and read each sheet into an item in a list.
    # alternatively, use lapply() instead of map()
    listofsheets <- map(sheetnames, ~ read_excel("path/to/myfile.xlsx", sheet = .x))
    

    【讨论】:

      【解决方案2】:

      我建议使用 tidyverse 的 readxl。你可以这样写:

      library(readxl)
      sheets <- excel_sheets("insert_filepath/workbook.xlsx")
      
      data <- list()
      for (i in 1:length(sheets)) {
        data[[i]] <- read_excel("insert_filepath/workbook.xlsx", sheet = sheets[i])
      }
      

      因为我没有您的 Excel 文件,所以我无法准确地复制您的数据。但这应该是一个通用的解决方案,它可以在 Excel 文件中找到所有工作表名称,然后遍历每个工作表并将它们读入一个名为“数据”的列表中

      【讨论】:

        【解决方案3】:
        require(XLConnect)
        
        # Load workbook
        wb <- loadWorkbook(system.file("demoFiles/multiregion.xlsx", package = "XLConnect"))
        
        # Read all worksheets into a list of data.frames
        listOfDfs <- readWorksheet(wb, sheet = getSheets(wb))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多