楚新元 | All in R

Welcome to R Square

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

楚新元 / 2021-09-03


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

方案一

# 加载 R 包
library(dplyr)
library(purrr)
library(fs)
library(openxlsx)

# 批量生成 txt 测试文件
if (dir.exists("data") == FALSE) dir.create("data")
list = group_split(iris, Species)
files = paste0("./data/", levels(iris$Species), ".txt")
walk2(list, files, write.table)

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

# 将数据框按照源头拆分成包含多个数据框的列表
list = group_split(data, source, .keep = FALSE)
files = gsub(
  ".txt", ".xlsx", 
  paste0("./data/", levels(data$source))
)
walk2(list, files, write.xlsx)  # 批量写入 Excel

方案二

# 加载 R 包
library(dplyr)
library(purrr)
library(fs)
library(rio)

# 批量生成 txt 测试文件
if (dir.exists("data") == FALSE) dir.create("data")
list = group_split(iris, Species)
files = paste0("./data/", levels(iris$Species), ".txt")
walk2(list, files, ~ write.table(.x, .y, row.names = F))

# 批量将 txt 文件直接转为 Excel 文件
files_path = dir_ls("./data", glob = "*.txt")
walk(files_path, ~ convert(.x, gsub(".txt", ".xlsx", .x)))