Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I rename files using R?

Tags:

r

file-rename

I have over 700 files in one folder named as: files from number 1 to number9 are named for the first month:

water_200101_01.img   water_200101_09.img   

files from number 10 to number30 are named:

water_200101_10.img water_200101_30.img 

And so on for the second month: files from number 1 to number9 are named:

water_200102_01.img   water_200102_09.img   

files from number 10 to number30 are named:

water_200102_10.img water_200102_30.img  

How can I rename them without making any changes to the files. just change the nams, for example

water_1 water_2 ...till... water_700 
like image 921
sacvf Avatar asked May 25 '12 17:05

sacvf


People also ask

How do you rename a file in R?

In this article, we are going to see how to rename files using R Programming Language. To rename a file in R we use file. rename(). This function renames all the files mentioned as parameters.

How do I rename data in R studio?

If you select option R, a panel is displayed to allow you to enter the new data set name. Type the new data set name and press Enter to rename, or enter the END command to cancel. Either action returns you to the previous panel.


2 Answers

file.rename will rename files, and it can take a vector of both from and to names.

So something like:

file.rename(list.files(pattern="water_*.img"), paste0("water_", 1:700)) 

might work.

If care about the order specifically, you could either sort the list of files that currently exist, or if they follow a particular pattern, just create the vector of filenames directly (although I note that 700 is not a multiple of 30).

I will set aside the question, "why would you want to?" since you seem to be throwing away information in the filename, but presumably that information is contained elsewhere as well.

like image 182
Brian Diggs Avatar answered Sep 23 '22 13:09

Brian Diggs


I wrote this for myself. It is fast, allows regex in find and replace, can ignore the file suffix, and can show what would happen in a "trial run" as well as protect against over-writing existing files.

If you are are on a mac, it can use applescript to pick out the current folder in the Finder as a target folder.

umx_rename_file <- function(findStr = "Finder", replaceStr = NA, baseFolder = "Finder", test = TRUE, ignoreSuffix = TRUE, listPattern = NULL, overwrite = FALSE) {     umx_check(!is.na(replaceStr), "stop", "Please set a replaceStr to the replacement string you desire.")      # ==============================     # = 1. Set folder to search in =     # ==============================     if(baseFolder == "Finder"){         baseFolder = system(intern = TRUE, "osascript -e 'tell application \"Finder\" to get the POSIX path of (target of front window as alias)'")         message("Using front-most Finder window:", baseFolder)     } else if(baseFolder == "") {         baseFolder = paste(dirname(file.choose(new = FALSE)), "/", sep = "") ## choose a directory         message("Using selected folder:", baseFolder)     }      # =================================================     # = 2. Find files matching listPattern or findStr =     # =================================================     a = list.files(baseFolder, pattern = listPattern)     message("found ", length(a), " possible files")      changed = 0     for (fn in a) {         if(grepl(pattern = findStr, fn, perl= TRUE)){             if(ignoreSuffix){                 # pull suffix and baseName (without suffix)                 baseName = sub(pattern = "(.*)(\\..*)$", x = fn, replacement = "\\1")                 suffix   = sub(pattern = "(.*)(\\..*)$", x = fn, replacement = "\\2")                 fnew = gsub(findStr, replacement = replaceStr, x = baseName, perl= TRUE) # replace all instances                 fnew = paste0(fnew, suffix)             } else {                 fnew = gsub(findStr, replacement = replaceStr, x = fn, perl= TRUE) # replace all instances             }             if(test){                 message(fn, " would be changed to:  ", omxQuotes(fnew))             } else {                 if((!overwrite) & file.exists(paste(baseFolder, fnew, sep = ""))){                     message("renaming ", fn, "to", fnew, "failed as already exists. To overwrite set T")                 } else {                     file.rename(paste0(baseFolder, fn), paste0(baseFolder, fnew))                     changed = changed + 1;                 }             }         }else{             if(test){                 # message(paste("bad file",fn))             }         }     }     if(test & changed==0){         message("set test = FALSE to actually change files.")     } else {         umx_msg(changed)     } } 
like image 31
tim Avatar answered Sep 21 '22 13:09

tim