【问题标题】:loop for changing file endings用于更改文件结尾的循环
【发布时间】:2020-03-30 20:01:24
【问题描述】:

我不得不拆分一个巨大的 csv 文件,现在我想处理每个文件,然后堆叠。

拆分后的数据文件命名为 data-000.csv、data-001.csv 等,直至 374。

但是,我不知道如何让 R 读取 [i]。

for (i in 3:3) {
  dat = read.csv("F:data-00[i].csv")
}

**cannot open file 'F:data-[i].csv': No such file or directory**

dat = read.csv('F:data-003.csv') 工作得很好。

如何通过我的文本文件替换后缀和进程?

非常感谢!

【问题讨论】:

    标签: r loops csv


    【解决方案1】:

    我们可以使用paste 来获取存储在i 中的值,而不是直接使用它。对于存储多个数据集,最好创建一个 NULL list,然后将数据分配给该对象

    lst1 <- vector('list', 3)
    for (i in 1:3) {
          lst1[[i]] = read.csv(paste0("F:data-00", i, ".csv")
         }
    

    另外,如果数字应该是 3 位,前缀为 0,则可以选择使用 sprintf 格式化

    lst1 <- vector('list', 374)
    files <- sprintf('F:data-%03d', 1:374)
    names(lst1) <- files
    for(file in files)  {
        lst1[[file]] <- read.csv(file)
     }
    

    如果我们使用lapply 也可以更容易,因为paste/sprintf 是矢量化的,它可以从循环中取出

    lst1 <- lapply(files, read.csv)
    

    有了tidyverse,我们可以使用map(来自purrr)和read_csv(来自readr

    library(purrr)
    library(readr)    
    lst1 <- map(files, read_csv)
    

    或者使用来自data.tablefread

    library(data.table)
    lst1 <- lapply(file, fread)
    

    【讨论】:

    • 非常感谢您提供解决方案的多种途径。它真的可以帮助像我这样的新手看到一些不同的方法:)
    • 完成!并感谢您的知识和推动:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    相关资源
    最近更新 更多