首页 > 解决方案 > 如果文件名符合指定条件,则将文件导入 R

问题描述

如果文件名包含特定字符串,则使用 RI 尝试循环导入 csv 文件

例如,我有一个名称为“file01042016_abc.csv”、“file020142016_abc.csv”、“file03042016_abc.csv”...“file26092019_abc.csv”的文件列表,并且我有一个格式为“01042016”的特定值列表、“05042016”、“09042016”等。

如果文件名包含第二个列表中的字符串值,我只想导入文件。

我可以完全导入它们(如下所示),但是有几千个文件并且需要相当长的时间,所以想通过仅导入基于上述条件所需的文件来减少它。

files <- list.files(path)

for (i in 1:length(files)) {

  assign(paste("Df", files[i], sep = "_"), read.csv(paste(path, files[i], sep='')))

}

任何帮助/建议将不胜感激。谢谢你。

标签: rstringcsvimport

解决方案


使用正则表达式和grepl

files <- list.files(path)
formats <- c("01042016", "05042016", "09042016")
regex <- paste(formats, collapse="|")

sapply(files, function(x) {
    if (grepl(regex, x)) {
        assign(paste("Df", x, sep = "_"), read.csv(paste(path, x, sep='')))
    }
})

这里的策略是生成一个包含所有数字文件名片段的单个正则表达式替换,这会将文件列入白名单作为要读取的候选者。对于上面给出的示例数据,regex将变为:

01042016|05042016|09042016

然后,我们调用grepl每个文件以查看它是否与白名单模式之一匹配。请注意,我切换到使用sapplyasfiles.list返回文件名的字符向量。


推荐阅读