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

时间:2019-02-01 16:37:51

标签: r excel lapply melt

我需要对存储在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将结果返回到控制台,但不创建任何文件。结果类似于.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文件,删除第一行(但标题)和名为“ ng”的列,通过标签“ itemname”和“ week”融化数据,将结果作为.csv写入工作目录归属原始文件名称的目录。然后-冲洗并重复。

1 个答案:

答案 0 :(得分:0)

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

  

file:为文件命名的字符串或为写入打开的连接。 “”表示输出到控制台。

以下将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))
                )
})