我有一张田野地图,我在那里拍摄了地块的图像。这些照片是从左到右拍摄的,像蛇一样;所以,从101,118,119,136,137,138,135,120,117,102,103,116 ......等。图片也按此顺序排列;但是,它们的名称不同,与绘图不对应,文件名看起来像100_498,100_499,100_500,100_501。因此,对于进一步的细节,图101等于文件100_498并且图118等于文件100_499等...我需要能够通过他们如何将场中的图片拍摄到它们对应的图形来重命名文件。地图如下。如果我用我的代码重命名它们将从上到下,因为它是蛇形的,图片将在文件夹中按顺序排列。
现在我需要重新做R代码...任何建议??? 我需要重命名这些文件,使其对应于此图。
这是我的代码,如果它们将从底部到顶部并且蛇形化的数据... 101,102,103,104,105,106,107,108,109,110,111,112 ...... .etc。
Plot map
109 110 127 128 145
108 111 126 129 144
107 112 125 130 143
106 113 124 131 142
105 114 123 132 141
104 115 122 133 140
103 116 121 134 139
102 117 120 135 138
101 118 119 136 137
f <-list.files(pattern="*.JPG") #imports files names
head(f) #first 6 rows of data
new_names <- paste("Plot_", #create new file name
formatC(seq(length(file_names)), #writes the number in
#sequential order
width=2,flag="0"),
".JPG",sep="")
head(new_names) #first 6 rows of data
file.rename(from=f, to=new_names) #replaces old file name with new file name
list.files(pattern=".JPG") #check to make sure it was done
答案 0 :(得分:0)
以下函数将fileno
转换为您要查找的100_498
格式。此示例适用于您的特定情况,但如果您需要更普遍地使用它,您可能希望对其进行参数化。
filecoords <- function(fileno){
fcol <- 498 + (fileno - 101) %/% 9
frow <- ifelse(fcol %% 2, 108-((fileno-101) %% 9),100+((fileno-101) %% 9))
return(paste(frow, fcol, sep="_"))
}
filecoords(c(101, 105, 124))
[1] "100_498" "104_498" "105_500"
反函数也可能有用。它需要一个字符串,如“104_498”,并使用绘图中的数字返回文件名“Plot_nnn”。
filenos <- function(coord){
coords <- as.numeric(unlist(strsplit(coord,"_")))
base <- 9*(coords[2]-498)+101
fileno <- base+ifelse(coords[2] %% 2,8-((coords[1]-100) %% 9),(coords[1]-100) %% 9)
return(paste0("Plot_",fileno))
}
filenos("105_500")
[1] "Plot_124"
所以你可以使用这样的东西重命名你的文件......
oldfiles <- list.files(pattern="\\.JPG") #get list of files
oldfilestems <- gsub("\\.JPG","",oldfiles) #remove the suffix
newfilestems <- sapply(oldfilestems,filenos) #assumes your old file stems are "100_498" format
newfiles <- paste0(newfilestems,".JPG") #add the suffix
file.rename(oldfiles,newfiles) #rename
答案 1 :(得分:0)
以下函数创建一个查找表,将一个方向的锯齿形转换为另一个方向的锯齿形......
zigzag <- function(n=45,r=9){ #n=number of plots, r=number of rows
#create desired new order as a matrix
new <- matrix(1:n,nrow=r)
even <- 2*seq_len(ncol(new)/2)
new[,even] <- apply(new[,even],2,rev)
#create old order as a matrix
old <- t(matrix(1:n,ncol=r))
even <- 2*seq_len(nrow(old)/2)
old[even,] <- t(apply(old[even,],1,rev))
#reduce to vectors and return look-up table as a dataframe
df <- data.frame(old=as.vector(old),new=as.vector(new))
return(df)
}
然后您可以按如下方式重命名文件......
lookup <- zigzag() #create lookup table
oldfiles <- paste0("100_",497+lookup$old,".JPG")
newfiles <- paste0("Plot_",100+lookup$new,".JPG")
file.rename(oldfiles,newfiles)
head(oldfiles,10)
[1] "100_498.JPG" "100_507.JPG" "100_508.JPG" "100_517.JPG" "100_518.JPG" "100_527.JPG" "100_528.JPG" "100_537.JPG"
[9] "100_538.JPG" "100_499.JPG"
head(newfiles,10)
[1] "Plot_101.JPG" "Plot_102.JPG" "Plot_103.JPG" "Plot_104.JPG" "Plot_105.JPG" "Plot_106.JPG" "Plot_107.JPG"
[8] "Plot_108.JPG" "Plot_109.JPG" "Plot_118.JPG"