tutoring2

knitr::opts_chunk$set(warning = FALSE, message = FALSE, eval = F)

每个文件夹代表一个站点。

这部分代码可以使用 matrix 而非 data.frame 的类型来处理,会快很多,底层逻辑参考 DataCamp

path_old <- "TestData"    # 原数据的路径
path_new <- "TestResult" # 整理后的文件夹所在的路径,不能是原数据的路径
#### 读取数据
df <- 
  tibble(
    files_path_old = file.path(path_old) %>% 
      list.files(full.names = T) %>% 
      list.files(full.names = T)
  ) %>%
  mutate(
    files_name = str_extract(files_path_old, "\\d+-.+"),
    id         = str_extract(files_name, "\\d+-\\d+"),
    path_new   = str_c(path_new, id)
  ) %>%
  unnest()
library(tidyverse)
all_file_path <- 
    "TestData" %>% 
    list.files(full.names = T,recursive = T)
dir_name_matrix <- 
    all_file_path %>% 
    dirname()
new_name_matrix <- 
    all_file_path %>% 
    basename() %>% 
    str_match('(\\d+-\\d+)-(\\d+)')
if (!dir.exists("TestResult")) {
    dir.create("TestResult")
}

file.path("TestResult",new_name_matrix[,2]) %>% 
    unique() %>% 
    as_tibble() %>% 
    mutate(
        create_dir = map(value
                         ,~if (!dir.exists(.)) {
                             dir.create(.)
                         }
                         )
    )

data_frame(
    old_name = all_file_path
    ,new_name = file.path("TestResult",new_name_matrix[,2],new_name_matrix[,3])
) %>% 
    mutate(
        rename_exe = 
            map2_lgl(
                old_name,new_name
                ,file.rename
            )
    )

使用 file.rename 是剪切而不是复制功能,因此效率会高。