You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中按指定日期范围加载含日期命名的文件?

在R中按日期范围批量加载带日期文件名的文件

问题场景

需要批量加载文件名包含8位日期(格式YYYYMMDD)的txt文件,文件名示例为SD07_TWK_20190822_003004.txt,要求仅加载指定日期范围内的文件(起始日期20190822,结束日期20190823)。现有批量加载代码未实现日期筛选,尝试自行添加筛选逻辑时出现错误。

原代码问题分析

你之前的尝试中,错误地从完整文件路径(filepath)中截取日期,而应该从文件名本身截取——完整路径包含前缀目录,导致截取位置偏移,无法正确获取日期。此外,先遍历所有文件再判断的效率较低,建议先筛选目标文件名再加载。

解决方案

方案1:先筛选文件名再加载(推荐)

先提取所有txt文件的日期,筛选出符合范围的文件名后再循环加载,逻辑更清晰且效率更高:

# 配置参数
path = "C:/path"
date_start = "20190822"
date_end = "20190823"
colnamesfull = c("time","v","a","t1","t2","t3","t4","t5","t6","t7","t8")

# 获取所有txt格式文件名(仅文件名,不含路径)
filenames = list.files(path = path, pattern = "\\.txt$", full.names = FALSE)

# 提取每个文件名中的8位日期(位置10-17,匹配你的文件名格式)
file_dates = substr(filenames, 10, 17)

# 筛选符合日期范围的文件名
filtered_filenames = filenames[file_dates >= date_start & file_dates <= date_end]

# 循环加载筛选后的文件
for(i in filtered_filenames){
  filepath = file.path(path, i)
  # 生成不带.txt后缀的变量名
  var_name = gsub("\\.txt$", "", i)
  assign(var_name, read.table(filepath,
                              skip = 20, 
                              col.names = colnamesfull, 
                              sep = ","))
}

方案2:修正原循环的判断逻辑

如果要保留原循环结构,只需修正日期截取的对象为文件名而非完整路径:

# 配置参数
path = "C:/path"
date_start = "20190822"
date_end = "20190823"
colnamesfull = c("time","v","a","t1","t2","t3","t4","t5","t6","t7","t8")

# 获取所有txt文件名
filenames = list.files(path = path, pattern = "\\.txt$")

# 循环遍历并筛选加载
for(i in filenames){
  # 从文件名中提取日期
  file_date = substr(i, 10, 17)
  if(file_date >= date_start & file_date <= date_end){
    filepath = file.path(path, i)
    var_name = gsub("\\.txt$", "", i)
    assign(var_name, read.table(filepath,
                                skip = 20, 
                                col.names = colnamesfull,
                                sep = ","))
  }
}

关键说明

  • 使用\\.txt$作为匹配模式,确保仅匹配以.txt结尾的文件,避免误匹配类似test.txt.bak的非目标文件。
  • substr(filenames, 10, 17)的截取位置是基于你的文件名格式SD07_TWK_YYYYMMDD_XXXXXX.txt确定的——前9个字符为SD07_TWK_,因此第10到17位正好是8位日期。
  • 用gsub("\\.txt$", "", i)生成不带后缀的变量名,避免出现SD07_TWK_20190822_003004.txt这种带后缀的变量名,更符合R的变量命名习惯。

内容的提问来源于stack exchange,提问作者Djingleberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 02:09:09