我有一组具有以下名称的文件:
lineal_fit_coef_yymmddhhmmss.csv
我想只选择那些在我开始日期之前的文件;在我的开始日期和结束日期之间;就在我的结束日期之后。
你怎么会在R?我一直在想它,但我没办法做到这一点。使用list.files?但是,您如何在文件名中引入中间日期的条件?
例如,我有文件:
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
我希望你能以某种方式帮助我。
答案 0 :(得分:1)
如何使用 dir 获取文件名列表。使用 substr 提取字符串的相应部分,使用 as.numeric 将其强制转换为数字,最后使用< 进行比较以选择文件你想用?
答案 1 :(得分:0)
我认为您正在寻找“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
...
答案 2 :(得分:0)
您可以编写类似下面的自定义函数
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])
}
这将允许您获取文件名中“timestamp”位于from
和to
参数定义的范围内的文件。
答案 3 :(得分:0)
您需要使用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]
希望这有帮助!
答案 4 :(得分:0)
试试这个(仅适用于特定情况):
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]
(你的例子是对的?我有不同的价值观)