【问题标题】:Apply gather function to multiple csv files, converting each input to an output file with a corresponding name in R将收集函数应用于多个 csv 文件,将每个输入转换为 R 中具有相应名称的输出文件
【发布时间】:2020-06-17 15:46:34
【问题描述】:

我使用“list.files”函数将大量 csv 文件放入列表中:

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

我想对每个文件使用 gather() 函数,然后使用 sink() 为每个 csv 文件生成单独的输出。我需要一些方法来识别哪个输出文件对应于哪个输入文件。

为了循环文件,我在使用 lapply() 时遇到了一些困难

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

我不确定如何获得相应的输出文件名 - 所以我尝试在 lapply 函数之前使用以下代码,这样至少输出文件将具有唯一的名称并且不会被覆盖:

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

但是,我对此很陌生,并且在互联网上搜索过我仍然无法实现我的目标(上述方法不起作用)。我将非常感谢任何能够抽出时间帮助绝望的菜鸟的人。

【问题讨论】:

    标签: r filenames lapply sink


    【解决方案1】:

    你可以试试:

    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

    【讨论】:

    • 非常感谢,这非常有帮助,我真的很感激。我确实注意到它仅适用于以相同数字开头的文件名。即我的一半文件的名称以“24”开头,另一半以“2”开头,但它只处理“24”文件。我通过简单地在所有文件名的前面添加“24”来解决这个问题。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2014-11-26
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多