Применить функцию сбора к нескольким CSV-файлам, преобразовав каждый входной файл в выходной файл с соответствующим именем в R - PullRequest
0 голосов
/ 05 марта 2020

У меня есть большое количество CSV-файлов, которые я сделал в виде списка с помощью функции "list.files":

list.files("C:/Users/gyero/Documents/daphnia/SUMMARY_CHIMP")

Я хочу использовать функцию collect () для каждого файла, а затем использовать () создать отдельный вывод для каждого файла CSV. Мне нужен какой-то способ определить, какой выходной файл соответствует какому входному файлу.

Чтобы l oop через файлы, которые у меня были проблемы с использованием lapply ()

lapply(list.files[1:33], function{gather(WELL,MEASURE,A1:D6)})

Я не конечно, как получить соответствующее имя выходного файла - поэтому я попытался добавить в функцию lapply следующий код, чтобы, по крайней мере, выходные файлы имели уникальное имя и не перезаписывались:

sink('DATA.CSV')
paste0(Sys.time(),'DATA.CSV')

Однако я очень плохо знаком с этим и, пройдя через inte rnet, я все еще не могу реализовать свою цель (вышеописанное не сработало). Я был бы МАССИВНО благодарен любому, кто мог бы сэкономить время, чтобы помочь отчаявшемуся новичку.

1 Ответ

1 голос
/ 05 марта 2020

Вы можете попробовать:

file_names <- list.files("C:/Users/gyero/Documents/daphnia/SUMMARY_CHIMP", 
                          full.names = TRUE)

lapply(file_names, function(x) {
    df <- read.csv(x)
    write.csv(tidyr::gather(df,WELL,MEASURE,A1:D6), 
              paste0(sub("\\.csv", "", basename(x)), "_output.csv"))
})

Если в папке есть такие файлы, как "A.csv", "B.csv", это создаст новые файлы с "A_output.csv", "B_output.csv". Также обратите внимание, что gather был удален и заменен на pivot_longer.

...