我有一组文件名如下的文件:
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])
}
这将允许您获得文件名中的"时间戳"在from
和to
参数定义的范围内的文件。
您需要使用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]
(你的例子是正确的吗?我有不同的值)