如何根据日期时间文件名在R中选择文件



我有一组文件名如下的文件:

lineal_fit_coef_yymmddhhmmss.csv

,我想只选择那些刚好在我开始日期之前的文件;我的开始日期和结束日期之间;就在我的结束日期之后。

在R中你会怎么做?我一直在想这件事,但我不知道怎么做。list.files吗?但是如何在filename中引入关于中间日期的条件呢?

例如,我有以下文件:

lineal_fit_coef_130220183448.csv
lineal_fit_coef_130223113802.csv
lineal_fit_coef_130226043153.csv
lineal_fit_coef_130306094439.csv
lineal_fit_coef_130307094011.csv

,我的起始日期是:130223193927,结束日期是:130227122246

我想只选择这三个文件:

lineal_fit_coef_130223113802.csv
lineal_fit_coef_130226043153.csv
lineal_fit_coef_130306094439.csv

我希望你能帮助我。

如何获取具有dir的文件名列表?使用substr提取字符串的适当部分,使用as将它们强制转换为数字。数值,最后比较使用<选择要使用的文件。

我想你是在找函数"file.info"

在您的csv文件中使用它,并将您的选择应用到mtime列

files = list.files(pattern="csv$")
finfo = file.info(files)
finfo$mtime

如果你想做同样的事情,但在文件名中使用时间,首先你必须将它们转换为日期,然后你可以执行你的选择。

#extract the part o the filename that holds the date
chardates = gsub(x=files, pattern = ".*_.*_.*_(.*).csv", replace="\1")
#convert it to a real R Date
dates = strptime(chardates, format="%y%m%d%H%M%S")
#perform your selection
...

您可以编写如下自定义函数

list.files.by.date <- function(from,to,...) {
  filelist <- list.files(...)
  timestamps <- as.POSIXct(gsub('.*([0-9]{12})+.*','\1',filelist), format='%y%m%d%H%S', tz='GMT' )
  fromtime <- as.POSIXct(from,, format='%y%m%d%H%S', tz='GMT' )
  totime <- as.POSIXct(to,, format='%y%m%d%H%S', tz='GMT' )
  return(filelist[timestamps >= fromtime & timestamps <= totime])
}

这将允许您获得文件名中的"时间戳"在fromto参数定义的范围内的文件。

您需要使用list.files(),将日期提取为字符串并转换为POSIXct。下面是获取日期的方法:

fileDates <- as.POSIXct(substr(list.files(pattern="lineal_fit_coef_[0-9]*\.csv"),17,28), format="%y%m%d%H%M%S")

然后您可以将这些与开始和结束日期进行比较,并将结果用作索引向量list.files():

startingDate <- as.POSIXct("130223193927", format="%y%m%d%H%M%S")
endingDate <- as.POSIXct("130227122246", format="%y%m%d%H%M%S")
list.files(pattern="lineal_fit_coef_[0-9]*\.csv")[fileDates >= startingDate & fileDates <= endingDate]

希望这对你有帮助!

试试这个(只适用于特定情况):

files <- c('lineal_fit_coef_130220183448.csv','lineal_fit_coef_130223113802.csv','lineal_fit_coef_130226043153.csv','lineal_fit_coef_130306094439.csv','lineal_fit_coef_130307094011.csv')
filesDATE <- as.double(gsub('[^0-9]', '', files))
files[filesDATE >= 130223193927 & filesDATE <= 130227122246]
(你的例子是正确的吗?我有不同的值)

最新更新