【问题标题】:Importing files with almost similar path and name导入具有几乎相似路径和名称的文件
【发布时间】:2018-07-13 12:39:23
【问题描述】:

我有很多txt文件要导入R,这些文件一个一个导入,我做我想做的操作,然后再导入下一个文件。

所有这些文件都位于一个数据库系统中,其中所有文件夹的名称几乎相同,例如

database\type4\system50  

database\type6\system50 

database\type4\system30 

database\type4\system50 

同样,文件的名称也几乎相同,指的是它们所在的文件夹,例如..

type4.system50.txt

type6.system50.txt

type4.system30.txt

type4.system50.txt

我听说应该有一种更简单的方法来逐个导入这些许多文件,而不是简单地使用多个 setwd 和 read.csv2 命令。据我了解,这可以通过 SAS 中的宏导入功能实现,您可以在其中指定一个整体路径,然后每次要导入文件时,您都可以指定该文件名/文件夹名的具体内容。

R中有类似的功能吗?我试着看 Importing Data in R like SAS macro

,但是这个问题并没有真正告诉我如何指定文件夹名称/文件名。

感谢您的帮助。

【问题讨论】:

    标签: r import


    【解决方案1】:

    如果你想指定文件夹名/文件名,试试这个

        databasepath="path/to/database"
    
        ## list all files
        list.files(getwd(),recursive = T,full.names = T,include.dirs = T) -> tmp
    
        ## filter files you want to read
        readmyfile <- function(foldername,filename){
          tmp[which(grepl(foldername,tmp) & grepl(filename,tmp))]
        }
        files_to_read <- readmyfile("type4", "system50")
    
        some_files <- lapply(files_to_read, read.csv2)
    
        ## Or you can read all of them (if memory is large enough to hold them)
    
        all_files <- lapply(tmp,read.csv2)
    

    【讨论】:

    • 谢谢@TC Zhang 这解决了我的问题。但是,与您通常使用 read.csv2 时相比,分隔符和小数点有所不同。原始文件由制表符分隔,并以逗号作为分隔符,当我通常使用 read.csv2 导入文件时,它工作正常(数据集在 R 中显示,带有制表符和点)。但是,当我使用 read.csv2 进行 lapply 时,小数仍然是逗号,分隔符写为 \t。我尝试了不同的方法,但似乎无法更改小数点和分隔符。使用 lapply 导入数据时如何指定分隔符和小数?
    【解决方案2】:

    您可以指定每个文件的绝对路径,将所有路径保存到一个向量,循环遍历路径向量并将文件加载到列表中,而不是连续使用setwd

    library(data.table)
    
    file_dir <- "path/to/files/"
    
    file_vec <- list.files(path = file_dir, pattern = "*.txt")
    
    file_list <- list()
    
    for (n in 1:length(file_list)){
      file_list[[n]] <- fread(input = paste0(file_dir, file_vec[n]))
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      相关资源
      最近更新 更多