【发布时间】:2019-10-10 20:53:11
【问题描述】:
尝试编写一个 R 脚本,该脚本将转换文件夹中的多个 xlsx 工作簿文件,同时还将工作簿中的工作表转换为单独的 csv 文件。 正在寻找一个脚本来自动将代码应用于所有工作簿及其电子表格。
【问题讨论】:
-
请查看How to make a great reproducible example in R 并更新您的问题。
尝试编写一个 R 脚本,该脚本将转换文件夹中的多个 xlsx 工作簿文件,同时还将工作簿中的工作表转换为单独的 csv 文件。 正在寻找一个脚本来自动将代码应用于所有工作簿及其电子表格。
【问题讨论】:
读取Excel文件,有several packages。
我个人对xlsx 包感到满意,您可以使用它来阅读 Excel 文件及其各个工作表。 This article 看起来它会给你它的要点。
您读出的每个工作表都应该能够使用 R 的内置 write.csv(或 write.csv2)方法导出为 CSV 文件。
【讨论】:
以下是将单个 xlsx 工作簿转换为多个 csv 文件的示例。 请注意,类型转换不保证正确。
xlsx_path <-"path_to_xlsx.xlsx"
sheet_names <- readxl::excel_sheets(xlsx_path)
# read from all sheets to a list of data frames
xlsx_data <- purrr::map(
sheet_names,
~readxl::read_excel(xlsx_path,.x,col_types = "text",col_names = FALSE)
)
# write a list of data frame to csv files
purrr::walk2(
xlsx_data,sheet_names,
~readr::write_csv(.x,paste0(xlsx_path,"-",.y,".csv"),col_names = FALSE)
)
# csv files will be saved as:
# path_to_xlsx-sheet1.xlsx, path_to_xlsx-sheet2.xlsx, ...
如果您需要将此功能应用于许多 xlsx 文件。使用list.files() 获取所有 xlsx 文件的路径。并编写一个for循环或使用另一个map函数来迭代这个过程。
【讨论】:
如果您使用的是 Rstudio,您可能已经安装了包 readxl。他们有许多常见用例的工作流程在这里解释:https://readxl.tidyverse.org/articles/articles/readxl-workflows.html
他们还提供了这个很好的代码 sn-p 来做你要求的事情:
read_then_csv <- function(sheet, path) {
pathbase <- tools::file_path_sans_ext(basename(path))
df <- read_excel(path = path, sheet = sheet)
write.csv(df, paste0(pathbase, "-", sheet, ".csv"),
quote = FALSE, row.names = FALSE)
df
}
path <- readxl_example("datasets.xlsx")
sheets <- excel_sheets(path)
xl_list <- lapply(excel_sheets(path), read_then_csv, path = path)
names(xl_list) <- sheets
【讨论】:
如果您转到here 并在搜索栏中输入“excel”和“xls”,您将获得可能有帮助的软件包和函数列表。
【讨论】: