我需要对存储在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写入工作目录归属原始文件名称的目录。然后-冲洗并重复。
答案 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))
)
})