【问题标题】:how to make for-loop order to rbind all excel files in the same directory [duplicate]如何使for循环命令rbind同一目录中的所有excel文件[重复]
【发布时间】:2019-10-12 14:07:27
【问题描述】:

我想 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循环命令?提前谢谢

【问题讨论】:

  • excel文件的名称是什么?
  • file1.xlsx,file2.xlsx 等等。这些文件具有相同的模板
  • 如果我的excel文件里面有几张表,我想先合并,然后再和其他excel文件合并,怎么办?
  • @NicodemusSigitSutanto - 我想第一步是开始编写或修改一些代码,然后在出现问题时询问具体问题。我在上面链接的问题之一(stackoverflow.com/questions/48519464/…)几乎就是你所描述的。

标签: r for-loop


【解决方案1】:

我们可以找到文件的完整路径名,然后使用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(.))))

【讨论】:

  • 如何删除商店栏中的“.xlsx”,所以我只得到没有扩展名的名称?
  • “.xlsx$”和“.xlsx”有什么区别?
  • @NicodemusSigitSutanto .xlsx$ 仅当 xlsx 出现在字符串的最后一部分时才会删除它,在不使用 $ 的情况下使用它会从字符串中的任何位置删除它。
【解决方案2】:

应该这样做,尽管 Reduce(rbind) 可能会很慢,具体取决于您拥有的文件数量。此外,您可能需要修改代码以根据扩展名读取文件。让我知道-

# set working directory to where the files are using setwd()

result <- lapply(dir(), function(x) {
  cbind(store = x, read.csv(paste0(x, ".csv"), header = T, stringsAsFactors = F))
}) %>% 
  {Reduce(rbind, .)}

【讨论】:

  • 我的文件是 xlsx 扩展名。是否适用?那么我只是用 xlsx 替换 csv?
  • 只要使用任何可以让您读取 xlsx 的软件包,并用它替换我的 read.csv
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 2018-08-24
  • 2022-01-13
相关资源
最近更新 更多