0

我有一组具有以下名称的文件:

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

我希望你能以某种方式帮助我。

4

5 回答 5

1

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

于 2013-04-02T16:06:21.420 回答
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
...
于 2013-04-02T15:57:43.683 回答
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])
}

from这将允许您获取文件名中“时间戳”位于和to参数定义的范围内的文件。

于 2013-04-02T16:04:45.007 回答
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]

希望这可以帮助!

于 2013-04-02T16:10:24.873 回答
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]

(你的例子是正确的?我得到了不同的值)

于 2013-04-02T17:20:06.313 回答