Этот подход получает список ваших файлов, создает функцию для проверки ваших критериев, проверяет, соответствуют ли файлы этим критериям с помощью функции, создает список файлов, соответствующих вашей функции, а затем записывает csvs в новую папку.(что вы, должно быть, создали).
Пример предназначен для работы с csvs в вашем вопросе, когда ни один из них не соответствует вашим критериям, поскольку я их интерпретирую, поэтому добавляется критерий теста, когда csv1 соответствует вашемукритерии.Чтобы отключить их, просто удалите #
из ваших критериев и поставьте #
перед критериями теста.
file.list <- list.files() # gets list of files - assumes your working directory is where the files are
check.csv <- function(csv.path){ #checks your criteria
the.csv <- read.csv(file = csv.path, header = TRUE)
sampled.years <- length(unique(the.csv$year))
min.samples.per.year <- min(table(the.csv$year))
min.f1A <- min(table(the.csv$year, the.csv$A)[,"1"])
#your criteria
#meets.criteria <- ifelse(sampled.years > 4 & min.samples.per.year >= 4 & min.f1A >=4, TRUE, FALSE)
#test criteria
meets.criteria <- ifelse(sampled.years >= 4 & min.samples.per.year >= 4 & min.f1A >= 2, TRUE, FALSE)
return(meets.criteria)
}
check.files <- sapply(file.list, check.csv) # checks if files meet criteria, as above, assumes that file.list has the whole path, which it will if your working directory is where the files are
files.to.write <- file.list[check.files] # subsets list of files to move
read.write <- function(csv.path){ # function to write csvs into new folder specified in the path as other_folder
the.csv <- read.csv(file = csv.path, header = TRUE)
write.csv(the.csv, file = sprintf("other_folder/%s", csv.path))
# this other_folder must exist
}
sapply(files.to.write, read.write) # write csvs to new folder