楚新元 | All in R

Welcome to R Square

利用 R 批量转数据文件格式

楚新元 / 2021-09-03


这里仅以 .txt 文本文件转 .xlsx 格式的 Excel 文件为例,其它格式同理。直接给出代码如下,读者自行体验。

加载相关 R 包

library(dplyr)
library(purrr)
library(fs)
library(openxlsx)
library(rio)

批量生成测试文件

# 批量生成 txt 测试文件
xfun::dir_create("data")
dest_file = paste0("./data/", levels(iris$Species), ".txt")
iris %>% 
  group_split(Species) %>% 
  walk2(
    ., dest_file, 
    ~ write.table(.x, .y, row.names = F)
  )

也可以用如下代码批量生成测试文件

# 批量生成 txt 测试文件
xfun::dir_create("data")
iris %>%
  group_nest(Species) %>%
  mutate(
    dest_file = paste0("./data/", Species, ".txt")
  ) %>%
  pwalk(~ write.table(..2, ..3, row.names = F))

方法一:批量读取、汇总、分组、写入 Excel

# 批量读取 txt 文件并合并成一个数据框
dir_ls("./data", glob = "*.txt") %>% 
  map_dfr(
    ~ read.table(., header = TRUE), 
    .id = "src"
  ) %>% 
  mutate(src = gsub("./data/", "", src)) %>% 
  mutate(src = as.factor(src)) -> data

# 将数据框按照来源分组后分别写入 Excel 文件
xfun::dir_create("result")
data %>% 
  group_nest(src) %>% 
  mutate(
    dest_file = paste0(
      "./result/", gsub("txt", "xlsx", src)
    )
  ) %>% 
  pwalk(~ write.xlsx(..2, ..3))

方法二:逐文件转换成 Excel 文件

dir_ls("./data", glob = "*.txt") %>% 
  walk(~ convert(.x, gsub("txt", "xlsx", .x)))

files = dir_ls("./data", glob = "*.xlsx")
file_move(files, gsub("data", "result", files))