【问题标题】:Saving Excel files in loop in r在r中循环保存Excel文件
【发布时间】:2019-02-15 21:45:40
【问题描述】:

我有数据框并创建了它的一个子集。我拆分数据框及其 子集由可变因素。我想将它保存在excel文件中。我想要 编写一个循环来创建多个excel文件数据框和子集文件是 以可变因子在工作表中。

我编写了一个代码,它只是保存了最后一种变量工作簿。 如何创建所有工作簿。

rm(list = ls())

mtcars


split_mtcars <- split(mtcars, mtcars$cyl)
split_mtcars_subset <- split(mtcars[,2:4], mtcars$cyl)

cyl_type <- names(split_mtcars)


for(i in length(cyl_type)){
wb <- createWorkbook()
addWorksheet(wb, "raw")
addWorksheet(wb, "subset")

writeData(wb, 1, split_mtcars[[i]])
writeData(wb, 2, split_mtcars_subset[[i]])

saveWorkbook(wb, file = paste0(cyl_type[i],".xlsx"), overwrite = TRUE)
}

提前致谢

【问题讨论】:

  • 您没有对名称进行排序,而只是获得长度 nr。通过写'for(i in 1:length(cyl_type))'来制作一个序列
  • 不需要第二次拆分。先使用split_mtcars[[i]][,2:5]

标签: r excel loops openxlsx


【解决方案1】:

考虑by 按因子拆分数据帧,以避免需要中间对象并隐藏循环。下面输出您的工作簿并构建数据框列表。

split_mtcars <- by(mtcars, mtcars$cyl, function(sub) {
    wb <- createWorkbook()
    addWorksheet(wb, "raw")
    addWorksheet(wb, "subset")

    writeData(wb, 1, sub)
    writeData(wb, 2, sub[,2:5])

    saveWorkbook(wb, file = paste0(sub$cyl[1],".xlsx"), overwrite = TRUE)

    return(sub)   # TO REPLICATE split()
})

【讨论】:

    猜你喜欢
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多