使用R更改文件名中的数字顺序

使用R更改文件名中的数字顺序,r,csv,R,Csv,很抱歉,我在任何地方都找不到这个问题的答案,非常感谢您的帮助 我一年中每小时都有.csv文件。文件名以以下方式写入: hh_dd_mm.csv(例如,2月1日00:00-->00_01_02.csv)。为了便于对一年中的小时数进行排序,我想将文件名改为mm_dd_hh.csv 如何在R中写入以将文件名从模式HH_DD_MM更改为MM_DD_HH a <- list.files(path = ".", pattern = "HH_DD_MM") b<-paste(pattern="M

很抱歉,我在任何地方都找不到这个问题的答案,非常感谢您的帮助

我一年中每小时都有.csv文件。文件名以以下方式写入: hh_dd_mm.csv(例如,2月1日00:00-->00_01_02.csv)。为了便于对一年中的小时数进行排序,我想将文件名改为mm_dd_hh.csv

如何在R中写入以将文件名从模式HH_DD_MM更改为MM_DD_HH

a <- list.files(path = ".", pattern = "HH_DD_MM") 
b<-paste(pattern="MM_DD_HH")
file.rename(a,b)

a不确定这是否是最佳解决方案,但似乎有效

a <- c("00_01_02.csv",  "00_02_02.csv")
b <- unname(sapply(a, function(x) {temp <- strsplit(x, "(_|[.])")[[1]] ; paste0(temp[[3]], "_", temp[[2]], "_", temp[[1]], ".", temp[[4]])}))
b
## [1] "02_01_00.csv" "02_02_00.csv"
a或者您可以:

a <- c("00_01_02.csv",  "00_02_02.csv")
gsub("(\\d{2})\\_(\\d{2})\\_(\\d{2})(.*)", "\\3_\\2_\\1\\4", a)
#[1] "02_01_00.csv" "02_02_00.csv"

a您可以使用
chartr
创建新文件名。这里有一个例子

> write.csv(c(1,1), "12_34_56")
> list.files()
# [1] "12_34_56"
> file.rename("12_34_56", chartr("1256", "5612", "12_34_56"))
# [1] TRUE
> list.files()
# [1] "56_34_12"
chartr
中,只要不改变原始字符串中的字符数,就可以替换字符串的元素。在上面的代码中,我基本上只是将
“12”
“56”
进行了交换,这看起来就像您正在尝试做的一样

或者,您可以编写一个短字符串交换函数

> strSwap <- function(x) paste(rev(strsplit(x, "[_]")[[1]]), collapse = "_")
> ( files <- c("84_15_45", "59_95_21", "31_51_49",   
               "51_88_27", "21_39_98", "35_27_14") )
# [1] "84_15_45" "59_95_21" "31_51_49" "51_88_27" "21_39_98" "35_27_14"
> sapply(files, strSwap, USE.NAMES = FALSE)
# [1] "45_15_84" "21_95_59" "49_51_31" "27_88_51" "98_39_21" "14_27_35"
>strSwap(文件,strSwap,USE.NAMES=FALSE)
# [1] "45_15_84" "21_95_59" "49_51_31" "27_88_51" "98_39_21" "14_27_35"
您也可以使用
substr s1 substr(文件,1,2)substr(文件,7,8)文件来实现它
# [1] "45_15_84" "21_95_59" "49_51_31" "27_88_51" "98_39_21" "14_27_35"
> s1 <- substr(files,1,2)
> substr(files,1,2) <- substr(files,7,8)
> substr(files,7,8) <- s1
> files
# [1] "45_15_84" "21_95_59" "49_51_31" "27_88_51" "98_39_21" "14_27_35"