【发布时间】:2017-12-26 05:19:09
【问题描述】:
我有许多从多选项卡 Excel 导入的数据框,我想将它们组合成一个大数据框。但首先,我想创建一个新列以将相应的工作表名称附加到每个数据框(即,对于数据框 A,创建值为“A”的新列,对于数据框 B,创建值为“B”的新列)。有没有一种简单的方法可以做到这一点?我想象某种循环,但我无法在网上找到一个解决方案来说明如何从 Excel 中提取工作表名称。将不胜感激有关如何做到这一点的任何提示。谢谢!
【问题讨论】:
我有许多从多选项卡 Excel 导入的数据框,我想将它们组合成一个大数据框。但首先,我想创建一个新列以将相应的工作表名称附加到每个数据框(即,对于数据框 A,创建值为“A”的新列,对于数据框 B,创建值为“B”的新列)。有没有一种简单的方法可以做到这一点?我想象某种循环,但我无法在网上找到一个解决方案来说明如何从 Excel 中提取工作表名称。将不胜感激有关如何做到这一点的任何提示。谢谢!
【问题讨论】:
我的解决方案基于 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)
}
【讨论】:
查看 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
【讨论】: