r - 如果文件名符合指定条件,则将文件导入 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='')))
}
任何帮助/建议将不胜感激。谢谢你。
解决方案
使用正则表达式和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
每个文件以查看它是否与白名单模式之一匹配。请注意,我切换到使用sapply
asfiles.list
返回文件名的字符向量。
推荐阅读
- powershell - Export-Csv 生成空输出文件
- python - 如何以非阻塞方式实际使用 pymongo ChangeStreams 和 Flask?
- docker - Docker 容器中的最新 MonetDB
- java - 多部分文件 Sping Boot
- python - 在 elasticsearch 上搜索逗号分隔的字符串列表
- jmeter - Jmeter - 通过命令行运行 .jmx 文件并以 html、csv 和 XML 输出格式获取摘要报告 - 所有三个
- google-apps-script - 有没有办法将特定工作表从一个工作簿复制到特定(和不同)文件夹作为谷歌中自己的独立工作表?
- flutter - 架构问题 - 当您可以更换组件时,导航的意义何在?
- python - 是否可以减小 tkinter 中的按钮大小?
- mysql - 从表中获取实体并对字段求和 - Sequelize