【问题标题】:How to convert and export a list of xlsx files to csv files in R如何在R中将xlsx文件列表转换并导出为csv文件
【发布时间】:2020-02-01 02:39:09
【问题描述】:

我正在尝试将大量 .xlsx 文件转换为 .csv,同时还为它们指定了一个新文件夹或目录来放置它们。具体来说,我想在我的工作目录中创建一个新文件夹来存放新转换的 .csv 文件。

根据前面的例子,我已经成功地使用下面的代码完成了转换部分

setwd("~/Myfolder")

files.to.read = list.files(pattern="xlsx")

lapply(files.to.read, function(f) {  
df = read.xlsx(f, sheetIndex=1)  
write.csv(df, gsub("xlsx", "csv", f), row.names=FALSE)})

这成功地将我原始工作目录中的所有 .xlsx 文件转换为 .csv。但是,我想要的是在该目录中创建一个新的子文件夹并将这些 .csv 文件放入其中。我知道答案可能涉及添加 dir.create() 要么 file.path()write.csv() 命令。但是,当我使用它们中的任何一个时,都会出现以下错误。

Error in file(file, ifelse(append, "a", "w")) : invalid 'open' argument

【问题讨论】:

    标签: r csv export-to-csv lapply xlsx


    【解决方案1】:

    如果没有可重现的例子,很难知道。如果您尝试执行read.xlsx(files.to.read[1], sheetIndex=1) 会发生什么?

    如果这有效,那么你已经很接近了。

    dir.create("your_folder_name")
    
    files.to.read = list.files(pattern="xlsx")
    
    lapply(files.to.read, function(f) {  
    df = read.xlsx(f, sheetIndex=1)
    # Make the new filename here
    new_filename = file.path(getwd(), "your_folder_name", gsub("xlsx", "csv", f))  
    write.csv(df, new_filename , row.names=FALSE)
    # provide some feedback
    print(paste("Writing", new_filename))
    }
    )
    
    

    可能是您的list.files() 命令有问题。 如果前面失败,请尝试:

    # Mind the full.names=TRUE to get the full path
    files.to.read = list.files(pattern="xlsx", full.names=TRUE)
    

    并摆脱new_filename 行。您无需通过file.path 创建它,只需照常使用gsub 命令即可。

    【讨论】:

    • 谢谢!这非常有效。您对如何提高函数的计算速度有什么想法吗?也许是read.xlsx 的替代品?
    • 这是一个宽泛的问题...如果您使用 readxl::read_xlsx() 并指定列类型(这样函数不会浪费时间猜测),它可能会运行得更快。我不知道您要读取的文件类型以及您需要它多快。我们在谈论什么时间尺度?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2018-07-22
    • 2020-07-28
    相关资源
    最近更新 更多