Как применить одно и то же действие ко всем файлам Excel в каталоге? - PullRequest
0 голосов
/ 01 февраля 2019

Мне нужно сформировать данные, хранящиеся в файлах 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 (подмножество (DataSource [- (1),], select = - c (ng)), id.vars = c ("itemname", "week")) </p>

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 голосов
/ 01 февраля 2019

Просто передайте фактический путь к файлу write.csv2.В противном случае, как указано в документе ?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))
                )
})
...