如何列出两个选定日期的数据集?

时间:2015-04-23 11:57:24

标签: r

我在名为.img的文件夹中有数千个不同的文件(具有相同的名称和扩展名data)。什么变化只是日期。如果我用这个:

 dir<- list.files ("C:\\Users\\data", "*.img", full.names = TRUE)

它会列出文件夹data中的所有文件。

我需要的只是列出01062005 to 29102008的日期:

如何命名文件的示例:

 File_yyyymmdd_data.img     (in which yyyymmdd varies for 10 years)

感谢任何想法或提示!

2 个答案:

答案 0 :(得分:1)

1)如果您的文件带有&#34;日期名称&#34;,请按照帖子格式化:&#34; File_yyyymmdd_data.img&#34;

restaurant_comments

2)或者您通过修改/创建/访问时间选择文件:

list.files.by.datedNames <- function(
  from,     # time starts
  to,       # time ends
  tz="GMT", # time zone
  myfiles   # a vector of all files
  ){
  mydates <- gsub("File_([0-9]{4})([0-9]{2})([0-9]{2})_data.img","\\1-\\2-\\3",myfiles)

  .from <- as.POSIXct(from,tz=tz)
  .to <- as.POSIXct(to,tz=tz)
  .whether <- vapply(mydates,function(e){
    .e <- as.POSIXct(e,tz=tz);    
    as.numeric(.e)>=as.numeric(.from) & as.numeric(.e)<=as.numeric(.to)
  },logical(1),USE.NAMES=FALSE)

  ret <- myfiles[.whether]
  return(ret)    
}

## Call it in your case
list.files.by.datedNames(
  "2005-06-01","2008-10-29",
  myfiles=list.files("C:\\Users\\data", "*.img"))

## ## A tested example to touch and check files in current working directory
## > system("touch File_20050101_data.img")
## > system("touch File_20060101_data.img")
## > system("touch File_20080101_data.img")
## > system("touch File_20090101_data.img")
## >
## > list.files.by.datedNames(
## +   "2005-06-01","2008-10-29",
## +   myfiles=list.files(pattern="*.img"))
## [1] "File_20060101_data.img" "File_20080101_data.img"

答案 1 :(得分:1)

根据评论中的讨论,我建议阅读完整的文件列表,然后通过常用的字符串操作集创建一个带日期的普通列,并使用所需的日期范围对新向量进行子集化。例如,

 @* Select visible children *@
    var selection = node.Children.Where("Visible").Where("Level <= " + maxLevelForSitemap);

    @* If any items are returned, render a list *@
    if (selection.Any())
    {
//code
}

子集将包含:

rm(list = ls())
mydates <- as.Date(c("2007-06-22", "2004-02-13", "2004-02-14","2004-02-15"))
subs.dates <- mydates[mydates <= "2004-02-14"]