动态将Excel“ XLS”文件列表转换为csv文件

时间:2018-07-30 13:33:53

标签: r

我目前有一个包含所有Excel(.xls)文件的文件夹,并且使用R我想使用“ openxlsx”包(或某些版本)将所有这些文件自动转换为CSV文件。

我目前有以下代码来转换文件之一并将其放置在同一文件夹中:

convert("team_order\\team_1.xlx", "team_order\\team_1.csv")

我想自动执行此过程,以便对文件夹中的所有文件执行此过程。谢谢!

2 个答案:

答案 0 :(得分:0)

我相信这应该可以解决问题:

sapply(list.files("team_order", pattern="\\.xls$", full.names = TRUE),
       function(x) convert(x, sub("\\.xls$","\\.csv",x)))

答案 1 :(得分:0)

如果您的excel文件都在同一个目录中,每个文件都只包含一个工作表,并且其格式设置为可以正确读取为数据帧(例如,数据从左上角的单元格开始,并且不包含空格),可以这样:

require(tidyverse)

files_to_load <- list.files([path to in directory], full.names = T)
filenames <- list.files([path to in directory], full.names = F)

df <- data_frame(name = filenames, location = files_to_load) %>% 
  mutate(name = stringr::str_replace(name, "xlsx$", "")) %>% 
  mutate(data = map(location, readxl::read_excel)) 

walk2(
.x = paste0(df$name, "csv"), # check that . still at end of file name
.y = df$data, 
.f = ~write_csv(data = .x, path = paste([out directory], .y, sep = "/"))
)

map创建一个列表列,每个元素包含一个数据框。

walk2接受两个参数.x.y,并将它们传递给函数.f,但不返回输出。 (即,它是出于副作用而运行的,通常是在您要读取/写入文件或创建图片时使用。)

n.b。没有经过测试,没有可重复的例子。