如何遍历多个Excel工作表并在新列中附加工作表名称?

时间:2017-07-20 13:16:17

标签: r excel loops dataframe

我有一些从多标签Excel导入的数据框,我希望将它们组合成一个大数据框。但首先,我想创建一个新列,将相应的工作表名称附加到每个数据框(即对于数据框A,创建值为“A”的新列,对于数据框B,创建值为“B”的新列)。有一个简单的方法吗?我想象某种循环,但我无法在网上找到解释如何从Excel中提取工作表名称的解决方案。非常感谢有关如何做到这一点的任何提示。谢谢!

2 个答案:

答案 0 :(得分:0)

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

excel一书中有4个标签的示例我命名为" a"," b"," c"和" d" 。结果是一个列表,其中包含每个选项卡的数据框,数据框中的列跟踪工作表名称。

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

答案 1 :(得分:0)

我的解决方案基于akaDrHouse,但是我还不能以答案为准,因此我将其编写为单独的解决方案。我对for循环的数量以及如何选择工作表进行了一些小的更改。另外,我存储与表同名的单独数据框。 mysheets_fromexcel [[i]] <-pdf格式对我不起作用,它将工作表列表作为单独的小标题显示。

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)
}