рекурсивно читать в CSV-файлах и выполнять вычисления на двух файлах - PullRequest
0 голосов
/ 27 мая 2019

У меня есть список файлов, которые я хотел бы импортировать, выполнить вычисления и сохранить результат.

У меня есть несколько папок, помеченных следующим образом:

2005, 2006, 2007 ... 2018.

Файлы сохраняются как:

file_2005.csv, file_2006.csv, file_2007.csv ... file_2018.csv.

(один файл на папку)

Я пытаюсь написать функцию, которая будет выполнять следующие действия:

  • чтение из file_2005.csv и file_2006.csv из папки 2005 и 2006 соответственно.
  • выполняют некоторую очистку, обработку и некоторые вычисления для этих 2 наборов данных.
  • сохраняют результаты.

- читайте вfile_2006.csv и теперь file_2007.csv из папки 2006 и 2007.- выполнить те же вычисления, что и раньше.- сохранить результаты.

--- читать в file_2007.csv и file_2008.csv из папки 2007 и 2008.

--- выполнять те же вычисления

--- сохранить результаты.

и т.д ...

Поэтому я хотел бы знать, как я могу рекурсивно создать такую ​​функцию, которая по существу считывает все данные и обрабатывает результаты.

Когда я читаю все годы вместе, у меня возникают проблемы с памятью.

1 Ответ

0 голосов
/ 28 мая 2019

Список файлов

LF <- list.files(path="Years",pattern=".csv",full.names=T,recursive=T)

Создайте data.frame с двумя столбцами - один со всеми годами меньше последнего, а другой со всеми столбцами меньше первого

data <- data.frame(V1=LF[-c(length(LF))])
data$V2 <- LF[-c(1)]

Затем разбить на список кадров данных по строке

li <- split(data, seq(nrow(data)))

Затем прочитайте оба файла в каждой строке (т. Е. Один год в столбце 1 и следующий в столбце 2. Сделайте это с помощью lapply, где вы также можете применить функцию f(x) и записать выходные данные csv. Я использовал sprintf для настройки имен файлов

RF <- lapply(li, function(x) {
  dat1 <- read.csv(as.character(x$V1))
  dat2 <- read.csv(as.character(x$V2))
  ndat1 <- f(dat1)
  ndat2 <- f(dat2)
  write.csv (ndat1, sprintf("new_%s",x$V1))
  write.csv (ndat2, sprintf("new_%s",x$V2))
})

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