对不起,我无法在任何地方找到这个问题的答案,非常感谢你的帮助。
我每年每小时都有.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)
答案 0 :(得分:1)
或者你可以这样做:
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"
答案 1 :(得分:0)
不确定这是否是最佳解决方案,但似乎有效
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"
答案 2 :(得分:0)
您可以使用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"
你也可以使用substr<-
赋值函数
> 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"