【问题标题】:R read_excel or readxl Multiple Files with Multiple Sheets - BindR read_excel 或 readxl 具有多个工作表的多个文件 - 绑定
【发布时间】:2019-11-13 10:32:57
【问题描述】:

我有一个充满 .xlsx 文件的目录。他们都有多张纸。我想从所有文件中提取同一张表并将它们附加到一个小标题中。

我找到了许多从单个 Excel 文件中提取多张工作表的解决方案;但是,不是来自多个文件的单个工作表。

我试过了:

    paths = as.tibble(list.files("data/BAH", pattern = ".xlsx", full.names = TRUE, all.files = FALSE))

    test <- paths %>% read_xlsx(sheet = "Portal", col_names = TRUE)

我知道“路径”变量包含我所有的带路径的文件名。但是,我不确定如何遍历每个文件名,仅将特定的 sheet = "Portal" 附加到 csv 文件。

错误是:

Error: path must be a string

我尝试将路径作为向量、小标题传递,并尝试对其进行下标。一切都失败了。

所以,总而言之。我有一个 xlsx 文件目录,我需要从每个文件中提取一张纸并将其附加到 csv 文件中。我曾尝试将 purrr 与一些地图功能一起使用,但也无法使其正常工作。

我的目标是使用整洁的方式。

感谢您的任何提示。

【问题讨论】:

    标签: r excel tidyverse readxl


    【解决方案1】:

    您必须使用lapply()map()。试试

    test <- lapply(paths, read_xlsx, sheet = "Portal", col_names = TRUE)
    

    library(purrr)
    test <- map_dfr(paths, read_xlsx, sheet = "Portal", col_names = TRUE)
    

    然后您可以将数据框与

    绑定
    library(dplyr)
    test %>% bind_rows()
    

    【讨论】:

    • 您的回答有效。你知道添加文件名字符串的列的方法吗?
    • 如果您将一个表传递给 map_dfr,其中有一列用于路径和一列用于工作表,您将如何执行此操作?当我做 map_dfr(tibble_df, ~read_excel(path = tibble_df$path, sheet = tibble_df$sheet)) 我在 tibble_df$path 中得到错误:$ operator is invalid for atomic vectors
    【解决方案2】:
    library(tidyverse)    
    library(readxl)
    library(fs)
    
    # Get all files
    xlsx_files <- fs::dir_ls("data/BAH", regexp = "\\.xlsx$")
    
    paths = as_tibble(list.files("data/BAH", pattern = ".xlsx", full.names = TRUE, all.files = FALSE))
    
    
    #portal_tabs <- map_dfr(paths, read_xlsx, sheet = "Portal", col_names = TRUE)
    portal_tabs <- map_dfr(xlsx_files, read_xlsx, sheet = "Portal", col_names = TRUE, .id = 'source')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 2021-12-23
      • 2018-07-09
      • 2021-01-05
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      相关资源
      最近更新 更多