将 Excel 文件名与 dplyr::bind_rows .id 相关联

Zac*_*ach 3 r list dplyr

我有大约 50-60 个 Excel 工作簿位于一个目录中。这些 Excel 文件大体上都是一样的。有两张工作表,一张带有说明,另一张在所有工作表中具有相同的整齐数据。列/变量 A 到 J 是我实际想要提取的数据,但我愿意将其全部读入 data.frame。数据输出到 A 到 N 列。

我正在编写一个脚本来提取所有原始数据,到目前为止一切顺利。我的脚本的一部分使用 list.files 的标准方法来构建文件名的“df”。然后,我使用 'lapply' 将所有 excel 文件读入一个列表。现在麻烦来了。

我想使用 dplyr::bind_rows (但我愿意接受其他建议)然后将所有行绑定在一起,因为它们是相同的并共享相同的标题。这在我的概念证明中非常有效。当我使用 dplyr::bind_rows 的 .id 参数时,我得到 1 到 j 作为 id var,它对应于列表中的 data.frame 位置。

files.list <- list.files(pattern='*.xlsx') # list file names in directory
df.list <- lapply(files.list, read_excel) # read excel into a list of dfs
df <- bind_rows(df.list, .id = "id") # bind the rows of the dfs together
Run Code Online (Sandbox Code Playgroud)

是否可以获取实际文件名而不是从 data.frame 读取的列表中的位置?如果是这样,我该怎么做?

Psi*_*dom 5

尝试使用文件名重命名数据框列表setNames;From ?bind_rows: .id 标签取自 bind_rows() 的命名参数。当提供数据框列表时,标签取自列表名称。如果未找到名称,则使用数字序列代替。

files.list <- list.files(pattern='*.xlsx')
df.list <- setNames(lapply(files.list, read_excel), files.list)
df <- bind_rows(df.list, .id = "id")
Run Code Online (Sandbox Code Playgroud)

  • 赢家赢家鸡肉晚餐! (2认同)