如何对目录中的所有 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))
)
})
我需要调整存储在 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))
)
})