我有多个excel文件,它们有唯一的工作表名称(在我的案例中创建文件的日期)。我批量阅读它们,需要将表格名称分配给新列“id”中的每个文件。我知道如何制作数字ID,或id =文件名,但无法找到将工作表名称作为id的方法。
library(readxl)
library(data.table)
file.list <- list.files("C:/Users/.../Studies/",pattern='*.xlsx')
df.list <- lapply(file.list, read_excel)
#id = numeric
df <- rbindlist(df.list, idcol = "id")
#Or by file name:
attr(df.list, "names") <- file.list
df2 = rbindlist(df.list,idcol="id")
#How to get sheet names?
答案 0 :(得分:3)
如果您恰好只处理文件的第一张,那么以下内容可以帮助您将第一张图片的名称作为数据框的id
:
attr(df.list, "names") <- sapply(file.list, function(x) excel_sheets(x)[1])
但是,如果您正在考虑从所有可用工作表中导入数据,则需要做更多工作,从创建数据框列表的方式开始:
df.list <- lapply(file.list,function(x) {
sheets <- excel_sheets(x)
dfs <- lapply(sheets, function(y) {
read_excel(x, sheet = y)
})
names(dfs) <- sheets
dfs
})
这应创建一个列表列表,其中应包含文件中的所有可用数据。主列表中的列表在工作表名称后适当命名。因此,您之后不需要更改任何属性。但是要将数据帧绑定在一起,您需要执行以下操作:
rbindlist(lapply(df.list, rbindlist, id = "id"))
我希望这证明有用。