我有60" .tif"文件夹中的文件。它们的名称如下:a_1,a_2,a_3,...,a_30 b_1,b_2,b_3,...,b_30等。
我想按日期更改数值。 例如,a_1和b_1将分别由a_2010-01-01和b_2010-01-01重命名,a_2和b_2将由a_2010-01-02和b_2010-01-02等重命名。
我创建了两个向量:
file_name<-list.files("/path/", pattern="tif", recursive=F)
d<-seq(1, 100, 1)
day <- seq(from=as.Date("2010-01-01"), to= as.Date("2010-01-30"), by='day')
我尝试使用gsub函数,但我真的不明白如何使用它:
gsub(d, day, file_name)
我是R的新人。
答案 0 :(得分:1)
这里的关键是您不会将此视为gsub
问题。你在那里正确,因为我不认为你想使用gsub
。您已创建了日期向量,现在只需将其添加到"a_"
和"b"
之前。 file.rename()
是您要用来重命名文件的内容。在重命名文件时尝试模式匹配比它的价值更痛苦。只需创建矢量并重命名:
old_names <- list.files(pattern="tif", recursive=F)
days <- seq(from = as.Date("2010-01-01"), to = as.Date("2010-01-30"), by = "day")
new_names <- paste(paste(rep(c("a", "b"), each = 30), days, sep = "_"), "tif", sep = ".")
file.rename(from = old_names, to = new_names)
答案 1 :(得分:0)
它可以通过多种方式完成,这是一个易于理解的方法:
library(data.table)
file_name<-list.files("/path/", pattern="tif", recursive=F)
day <- seq(from=as.Date("2010-01-01"), to= as.Date("2010-01-30"), by='day')
for(i in 1:30){
oldFiles = file_name[file_name %like% paste0("_",i)]
cat("Handling", oldFiles, "\n")
newFiles = gsub(paste0("_", i), paste0("_", as.character(day[i])), oldFiles)
file.rename(from = file.path("/path", oldFiles),to = file.path("/path", newFiles))
}
确保您已将“/ path”更改为文件目录并在运行上述代码之前进行备份,因为它是盲目编写的。
答案 2 :(得分:0)
选项是将strsplit
与sapply
一起使用为:
# Represents sample files from directory
v <- c('a_1', 'a_2', 'a_3','a_30', 'b_1', 'b_2', 'b_3','b_30')
sapply(strsplit(v, split = "_"), function(x){
sprintf("%s_%s-%02d",x[1],"2010-01", as.numeric(x[2]))
})
#[1] "a_2010-01-01" "a_2010-01-02" "a_2010-01-03" "a_2010-01-30" "b_2010-01-01"
# "b_2010-01-02" "b_2010-01-03" "b_2010-01-30"