【问题标题】:How to loop through multiple excel sheets and append sheetname in new column?如何遍历多个 Excel 工作表并将工作表名称附加到新列中?
【发布时间】:2017-12-26 05:19:09
【问题描述】:

我有许多从多选项卡 Excel 导入的数据框,我想将它们组合成一个大数据框。但首先,我想创建一个新列以将相应的工作表名称附加到每个数据框(即,对于数据框 A,创建值为“A”的新列,对于数据框 B,创建值为“B”的新列)。有没有一种简单的方法可以做到这一点?我想象某种循环,但我无法在网上找到一个解决方案来说明如何从 Excel 中提取工作表名称。将不胜感激有关如何做到这一点的任何提示。谢谢!

【问题讨论】:

    标签: r excel loops dataframe


    【解决方案1】:

    我的解决方案基于 akaDrHouse,但我还不能对答案发表评论,因此我将其编写为单独的解决方案。我对 for 循环的计数以及如何选择工作表进行了一些小改动。此外,我存储与工作表同名的单独数据框。 mysheets_fromexcel[[i]]

    library(readxl)
    xlsx_file <- "../path/to/excelfile.xlsx"
    mysheets_fromexcel <- list()
    mysheetlist <- excel_sheets(xlsx_file)
    i=1
    for (i in 1:length(mysheetlist[])){  
      tempdf <- read_excel(path=xlsx_file, sheet = i)
      tempdf$sheetname <- mysheetlist[i]
      ##mysheets_fromexcel[[i]] <- tempdf
      assign(mysheetlist[[i]], tempdf)
    } 
    

    【讨论】:

      【解决方案2】:

      查看 Hadley Wickham 的 readxl 软件包。您可以使用excel_sheets() 获取工作簿中每个工作表的列表,然后您可以在循环中使用该列表。

      在我制作的名为“a”、“b”、“c”和“d”的 Excel 书中有 4 个选项卡的示例。结果是一个列表,每个选项卡都有一个数据框,数据框中的一列跟踪工作表名称。

      library(readxl)
      
      #initialize readin listing
      mysheets_fromexcel <- list()
      
      mysheetlist <- excel_sheets(path="your/path/yourworkbook.xlsx")
      i=1
      for (i in 1:length(mysheetlist)){
        tempdf <- read_excel(path="C:/Users/john/Desktop/Book1.xlsx", sheet = mysheetlist[i])
        tempdf$sheetname <- mysheetlist[i]
        mysheets_fromexcel[[i]] <- tempdf 
      }
      
      mysheets_fromexcel
      
      [[1]]
      # A tibble: 3 x 2
        revision sheetname
           <dbl>     <chr>
      1        1         a
      2        2         a
      3        3         a
      
      [[2]]
      # A tibble: 3 x 2
        revision sheetname
           <dbl>     <chr>
      1        1         b
      2        2         b
      3        3         b
      
      [[3]]
      # A tibble: 3 x 2
        revision sheetname
           <dbl>     <chr>
      1        1         c
      2        2         c
      3        3         c
      
      [[4]]
      # A tibble: 3 x 2
        revision sheetname
           <dbl>     <chr>
      1        1         d
      2        2         d
      3        3         d
      

      【讨论】:

        猜你喜欢
        • 2019-04-06
        • 2021-06-23
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多