如何对目录中的所有 Excel 文件应用相同的操作?

How do I apply the same action to all Excel Files in the directory?

我需要调整存储在 Excel 文件中的数据并将其另存为新的 .csv 文件。我想出了具体应该做什么,但无法理解如何使用 lapply。

所有 Excell 个文件具有相同的结构。每个 .csv 文件都应具有原始文件的名称。

## the original actions successfully performed on a single file   
library(readxl)

library("reshape2")

DataSource  <- read_excel("File1.xlsx", sheet = "Sheet10")

DataShaped <- melt(subset(DataSource [-(1),], select = - c(ng)), id.vars = c ("itemname","week") )

write.csv2(DataShaped, "C:/Users/Ol/Desktop/Meta/File1.csv")

## my attempt to apply to the rest of the files in the directory
lapply(Files, function (i){write.csv2((melt(subset(read_excel(i,sheet = "Sheet10")[-(1),], select = - c(ng)), id.vars = c ("itemname","week"))))})

R returns 将结果发送到控制台但不创建任何文件。结果类似于 .csv 结构。

谁能解释一下我做错了什么?我是 R 的新手,非常感谢您的帮助

回答

感谢@Parfait 的及时回答,代码正在运行!很高兴。这是:

library(readxl)
library(reshape2)

Files <- list.files(full.names = TRUE)

lapply(Files, function(i) {
  write.csv2(
    melt(subset(read_excel(i, sheet = "Decomp_Val")[-(1),],
         select = -c(ng)),id.vars = c("itemname","week")),
    file = paste0(sub(".xlsx", ".csv",i)))
  })

它读取目录中的 Excel 文件,删除第一行(但 headers)和名为“ng”的列,通过标签“itemname”和“week”融化数据,将结果作为 .csv 写入工作目录,并指定原始文件的名称。然后 - 冲洗并重复。

只需将实际文件路径传递给write.csv2。否则,如文档 ?write.csv 中所述,file 参数的默认值为空字符串 "" :

file: either a character string naming a file or a connection open for writing. "" indicates output to the console.

下面将 Excel 文件主干连接到扩展名为 .csv 的指定路径目录:

path <- "C:/Users/Ol/Desktop/Meta/"

lapply(Files, function (i){ 
      write.csv2(
                 melt(subset(read_excel(i, sheet = "Sheet10")[-(1),], 
                             select = -c(ng)), 
                       id.vars = c("itemname","week")),
                 file = paste0(path, sub(".xlsx", ".csv", i))
                )
})