【问题标题】:Read All Excel Files into R by Sheet with file name as column将所有 Excel 文件按表读取到 R 中,文件名作为列
【发布时间】:2019-02-25 04:10:55
【问题描述】:

我有一个本地文件夹,其中包含相同格式的 excel 文件。每个excel文件有10张。

我希望能够做到以下几点:

1) 读取R中所有的excel文件

2) 将所有结果绑定在一起,但按表格

3) 结果将是 10 个新的数据帧,其中所有的 excel 文件被重新绑定在一起。

4) 新列将添加文件名

我已经查找了代码,我能找到的最好的就是这个,但它不是按表格来做的:

files = list.files()
library(plyr)
library(readr)
library(readxl)
data2=lapply(files, read_excel)
for (i in 1:length(data2)){data2[[i]]<-cbind(data2[[i]],files[i])}
all_data <- do.call("rbind.fill", data2) 

有人在这方面取得过成功吗?

提前致谢

【问题讨论】:

  • readxl::excel_sheets 是你的朋友

标签: r plyr readr readxl


【解决方案1】:

如果您愿意,也可以使用tidyverse 方法对其进行矢量化。

require(tidyverse)

df <- list.files(path = "your_path",
                       full.names = TRUE,
                       recursive = TRUE,
                       pattern = "*.xls") %>% 
tbl_df() %>%
mutate(sheetName = map(value, readxl::excel_sheets)) %>%
unnest(sheetName) %>% 
mutate(myFiles = purrr::map2(value, sheetName, function(x,y) {
    readxl::read_excel(x, sheet = paste(y))})) %>% 
unnest(myFiles)

*不知何故我无法标记它,所以我从here复制我的答案

【讨论】:

  • 谢谢!有没有办法将它们作为单独的数据框而不是全部在 1 中?我希望每个工作表名称都是它自己的数据框,因为每个工作表都采用不同的格式。因此,预期的结果将是 10 个不同的数据框,代表与该文件夹中的所有文件绑定的每个工作表。
  • 想出了一个以您的代码为基础的解决方法。感谢您的帮助!
  • 抱歉,刚刚看到您的评论。别客气! :)
猜你喜欢
  • 2014-06-12
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多