Удалить csv-файлы, содержащие менее 10 записей из определенного каталога в R

#r #csv

#r #csv

Вопрос:

У меня около 100 csv-файлов в определенном каталоге, и я хочу использовать прогноз скользящей средней для всех файлов. Ниже приведен код, который я написал:

 fileNames <- Sys.glob("*.csv")
for (fileName in fileNames) {      
  abc <- read.csv(fileName, header = TRUE, sep = ",")

  library(stats)
  library(graphics)
  library(forecast)
  library(TTR)
  library(zoo)
  library(tseries)

  abc1 = abc[,1]
  abc1 = t(t(abc1))
  abc1 = as.vector(abc1)

  abc2 = ts(abc1, frequency = 12,start = c(2014,1))
  abc_decompose = decompose(abc2)
  plot(abc_decompose)

  forecast = (abc_decompose$trend)
  x <- data.frame(abc, forecast)
  write.csv (x, file = fileName, row.names=FALSE, col.names=TRUE)
}
  

Теперь этот код работает отлично. Он добавляет столбец с именем forecast к каждому из csv-файлов и записывает в них значения прогноза. Проблема заключается в том, что некоторые из этих 100 файлов csv слишком малы, и R показывает следующую ошибку:
Error in decompose(abc2) : time series has no or less than 2 periods

На самом деле меня не интересуют файлы, содержащие менее 10 записей, но удалить их вручную сложно. Пожалуйста, помогите.

Ответ №1:

Вы можете подсчитать строки каждого CSV-файла внутри вашего for цикла

 nrows <- sapply( csvfile, function(f) nrow(read.csv(f)) )
  

А затем сделайте то, что вы делаете, если nrows> 10.
Для удаления этих файлов используйте unlink.

 unlink(x, recursive = FALSE, force = FALSE)
  

Комментарии:

1. Примечание: если вы не хотите удалять исходные файлы, но просто не хотите их обрабатывать, просто используйте что-то вроде if(nrows<10) break внутри вашего цикла.

2. nrows выдает мне количество строк для каждого из файлов csv, но когда я использую if(nrows<10) break или, if (nrows>10){#my desired operations} R выдает следующее предупреждающее сообщение: the condition has length > 1 and only the first element will be used и программа не выдает желаемый результат.

3. В случае, если я не использую никаких ограничений в отношении количества строк и запускаю код для всех csv-файлов в этом каталоге, R показывает мне следующую ошибку Error in decompose(abc2) : time series has no or less than 2 periods