首页 > 解决方案 > 如何使for循环命令rbind同一目录中的所有excel文件

问题描述

我想 rbind 目录中的所有 excel 文件(无论文件总数)并创建一个新列,其中填充了文件名,这样我就可以确定数据的来源。例如,我有这样的文件模板

promo  stock
  a     200
  b     200
  c     200

变成这样

store  promo  stock
file1    a     200
file1    b     200
file1    c     200
file2    a     200
file2    b     200
file2    c     200
file3    a     200
file3    b     200
file3    c     200

如何为这种情况下一个for循环命令?提前谢谢

标签: rfor-loop

解决方案


我们可以找到文件的完整路径名,然后用它lapply来读取每个文件readxl::read_excel并添加一个store带有文件名的新列

file_paths <- list.files("/path/to/files", pattern = ".xlsx$", full.names = TRUE)

do.call(rbind, lapply(file_paths, function(x) 
    transform(readxl::read_excel(x), store = sub(".xlsx$", "", basename(x)))))

#  promo stock store                                            
#1     a   200 file1
#2     b   200 file1
#3     c   200 file1
#4     a   200 file2
#5     b   200 file2
#6     c   200 file2

我们也可以使用purrr::map_df

purrr::map_df(file_paths, ~transform(readxl::read_excel(.), 
                            store = sub(".xlsx$", "", basename(.))))

推荐阅读