Можно ли автоматизировать увеличение значения в имени файла в R? - PullRequest
0 голосов
/ 17 января 2020

Итак, у меня есть .csv данных о вложении, которые мне нужно обрезать. Я написал ряд функций в R, а затем выплюнул новый красивый .csv. Проблема в том, что мне нужно сделать это с 59 .csv, и я хотел бы автоматизировать имя.

data1 <- read.csv("Nest001.csv", skip = 3, header=F)
functions functions functions
write.csv("Nest001_NEW.csv, file.path(out.path, edit), row.names=F)

Итак ... есть ли способ для меня l oop имя Nest001 до Nest0059, чтобы мне не пришлось удалять и повторно вводить имя для каждого .csv?

Ответы [ 2 ]

1 голос
/ 17 января 2020

РЕДАКТИРОВАТЬ, чтобы включить предложение Грегора:

Один вариант:

filenames_in  <- sprintf("Nest%03d.csv", 1:59)
filenames_out <- sub(pattern = "(\\d{3})(\\.)", replacement = "\\1_NEW\\2", filenames_in)
all_files     <- matrix(c(filenames_in, filenames_out), ncol = 2)

И затем l oop через них:

for (i in 1:nrow(all_files)) {
  temp <- read.csv(all_files[[i, 1]], skip = 3, header=F)
  do stuff
  write.csv(temp, all_files[[i, 2]], row.names = f)
)

Для этого purrr -style, вы должны создать два списка, аналогичных приведенным выше, а затем написать пользовательскую функцию для чтения в файле, выполнить все функции и затем вывести ее.

например,

purrr::walk2(
  .x = list(filenames_in),
  .y = list(filenames_out),
  .f = ~my_function()
)

Рассмотрим .x и .y как i в цикле for; он просматривает оба списка одновременно и выполняет функцию для каждого элемента.

Более подробная информация доступна здесь .

0 голосов
/ 17 января 2020

Лучше всего поместить все эти CSV в одну папку, без каких-либо других CSV в этой папке. Затем вы можете записать al oop в go для каждого файла в этой папке и прочитать их в.

library(dplyr)    

setwd("path to the folder with CSV's goes here")
combinedData = data.frame()
files = list.files()

for (file in files)
{
  read.csv(file)
  combinedData = bind_rows(combinedData, file)
}

EDIT: если в папке есть другие файлы, которые вам не нужны чтобы прочитать, вы можете добавить эту строку кода, чтобы читать только в файлах, которые содержат слово «Гнездо» в заголовке:

files= files[grepl("Nest",filesToRead)]

Я не помню, как на макушке, если это так чувствительный или нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...