我目前有一个包含所有Excel(.xls)文件的文件夹,并且使用R我想使用“ openxlsx”包(或某些版本)将所有这些文件自动转换为CSV文件。
我目前有以下代码来转换文件之一并将其放置在同一文件夹中:
convert("team_order\\team_1.xlx", "team_order\\team_1.csv")
我想自动执行此过程,以便对文件夹中的所有文件执行此过程。谢谢!
答案 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。没有经过测试,没有可重复的例子。