从位于R中不同文件夹中的Excel文件导入图纸

从位于R中不同文件夹中的Excel文件导入图纸,r,excel,loops,import,readxl,R,Excel,Loops,Import,Readxl,基本上,我在两个不同的文件夹中有两个同名的Excel文件,一个是2018,另一个是2019。检查表有不同的表格,每个月一张:一月、二月等。。。当然,所有的工作表都有完全相同的变量。 我想把两个Excel文件中的所有表格放在同一个数据框中。 目前,我可以使用以下工具从一个Excel文件中收集工作表: library(readxl) library(tibble) read_excel_allsheets <- function(filename, tibble = TRUE) {

基本上,我在两个不同的文件夹中有两个同名的Excel文件,一个是2018,另一个是2019。检查表有不同的表格,每个月一张:一月、二月等。。。当然,所有的工作表都有完全相同的变量。 我想把两个Excel文件中的所有表格放在同一个数据框中。 目前,我可以使用以下工具从一个Excel文件中收集工作表:

library(readxl)   
library(tibble)
read_excel_allsheets <- function(filename, tibble = TRUE) {
  sheets <- readxl::excel_sheets(filename)
  x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X))
  if(!tibble) x <- lapply(x, as.data.frame)
  names(x) <- sheets
  x
}

mysheets <-read_excel_allsheets("C:/Users/Thiphaine/Documents/2018/Checklist.xlsx")
library(dplyr)
mysheets<-bind_rows(mysheets, .id = "column_label")
我只是不知道如何创建一个循环,通过2018和2019文件夹收集Excel文件中的所有工作表。这个想法也将是,在2020年,我将有另一个文件夹2020,应该包括。。。有什么想法吗?谢谢

试试这个:

library(dplyr)
allsheets <- list()
for(file in list.files(path = "PATH/TO/DCUMENTS/", 
    recursive = TRUE, pattern = "*.xlsx", full.names = TRUE)) {
  mysheets <- read_excel_allsheets(file)
  mysheets <- bind_rows(mysheets, .id = "column_label") 
  allsheets[[file]] <- mysheets
}

其中PATH/TO/DOCUMENTS可能类似于C:/Users/Thiphaine/DOCUMENTS/。

如果您愿意,也可以使用tidyverse方法对其进行矢量化。尤其是因为您的所有文件都是相同的列名,并且您希望以data.frame结束


谢谢Alko,我有一个消息错误:路径不存在:“Checklist.xlsx”您使用编辑过的代码了吗?我写的第一篇文章假设您正在读取工作目录下的文件。如果您使用full.names=TRUE,它将列出所有文件的完整路径。实际上,它现在可以工作,但我只从下列之一获取数据检查`list.filespath=PATH/TO/DCUMENTS/,recursive=TRUE,pattern=*.xlsx,full.names=TRUE`是否提供了要提取的所有文件的列表。如果是,那么您添加了代码来编写有问题的文件。可能它会覆盖结果。我编辑答案的方法是列出所有工作表。除了一些日期被转换成数字外,这还挺管用的。。但基本上,使用这种方法,我不需要我的代码来导入每张图纸?!你喜欢哪一行?我不确定是否理解这里的代码,但我有一些非常奇怪的行:/Date,所以我尝试跳过文件中的前5行,代码第7行的read_excelx,sheet=pastey,skip=4,但我在bind_rows_x中有一个警告错误,.id:列/日期无法从字符转换为POSIXct/POSIXtIt。您的excel日期/时间格式可能不一致或错误。您的工作表中有多少列?如果不是很多,您可以在读取之前定义它们,而不是让read\u excel函数使用col\u types参数进行猜测。这些是您的选项:跳过、猜测、逻辑、数字、日期、文本或列表。因此,您的日期/时间格式定义为文本而非日期。您可以在此处查找有关read_excel参数的更多信息,因此,我将col_types参数放在这里,最后得到50条警告,如下所示:1:In read_funpath=Enc2NavienormalizePathPath,sheet_I=sheet,…:A6/R6C1中的预期日期:获得“2018年11月1日”和一些NA,而不是一些日期。但是,如果有时同一张纸上有一些日期和日期,那有什么奇怪的呢。。。
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)