我在名为.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)
感谢任何想法或提示!
答案 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"]