读取多个xlsx文件,每个文件具有多个工作表-Purrr

时间:2018-07-01 04:00:03

标签: r purrr readxl

我有多个Excel文件,每个文件都有不同的工作表。我尝试使用readxl并将其映射到R。但是,我只能使用for循环来实现它。下面的代码可以正常工作,但是我想知道是否有一个聪明的方法可以做到这一点。我一直以为我可以用map2做到这一点,但我缺少了一些东西。

library(tidyverse)
library(readxl)
library(writexl)

### As a first step, I get all the files from my project folder and create an empty list for looping purposes

files <- list.files(pattern = ".xlsx")
data_xlsx <- list()

### I then use seq_along in all the files and map_df to read the each excel file

for (i in seq_along(files)) {
data_xlsx[[i]] <- files[i] %>% 
  excel_sheets() %>% 
  set_names() %>% 
  map_df(
    ~ read_xlsx(path = files[i], sheet = .x, range = "H3"),
    .id = "sheet")
}

# I use the code below to get the files name into the list

data_xlsx <- set_names(data_xlsx, files)

# This final code is just to transform the list into a data frame with a column with the name of the files

data_xlsx_df <- map2_df(data_xlsx, files, ~update_list(.x, file = .y))

reprex package(v0.2.0)于2018-07-01创建。

1 个答案:

答案 0 :(得分:5)

您可以使用嵌套的map_df调用来替换for循环。据我所知map2只能对两个长度为n的列表进行操作,并返回一个长度为n的列表,我认为这不是生成长度{{1 }}中的两个列表,其长度分别为n * mn

m