【问题标题】:List of data.frame's to individual excel worksheets - Rdata.frame 到单个 Excel 工作表的列表 - R
【发布时间】:2015-02-15 22:26:55
【问题描述】:

我有一个 data.frame 的列表,我想将其输出到他们自己的 Excel 工作表中。我可以轻松地将单个数据框保存到它自己的 excel 文件中,但我不确定如何将多个数据框保存到同一个 excel 文件中自己的工作表中。

library(xlsx)
write.xlsx(sortedTable[1], "c:/mydata.xlsx")

【问题讨论】:

    标签: r excel xlsx


    【解决方案1】:

    为每个列表元素指定工作表名称。

    library(xlsx)
    file <- paste("usarrests.xlsx", sep = "")
    write.xlsx(USArrests, file, sheetName = "Sheet1") 
    write.xlsx(USArrests, file, sheetName = "Sheet2", append = TRUE)
    

    @flodel 建议的第二种方法是使用addDataFrame。这或多或少是上述功能帮助页面中的一个示例。

    file <- paste("usarrests.xlsx", sep="")
    wb <- createWorkbook()
    sheet1 <- createSheet(wb, sheetName = "Sheet1")
    sheet2 <- createSheet(wb, sheetName = "Sheet2")
    
    addDataFrame(USArrests, sheet = sheet1)
    addDataFrame(USArrests * 2, sheet = sheet2)
    saveWorkbook(wb, file = file)
    

    假设您有一个 data.frames 列表和一个工作表名称列表,您可以成对使用它们。

    wb <- createWorkbook()
    datas <- list(USArrests, USArrests * 2)
    sheetnames <- paste0("Sheet", seq_along(datas)) # or names(datas) if provided
    sheets <- lapply(sheetnames, createSheet, wb = wb)
    void <- Map(addDataFrame, datas, sheets)
    saveWorkbook(wb, file = file)
    

    【讨论】:

    • @void&lt;-Map(addDataFrame, datas, sheets) 是为了什么?映射后看起来不像 void 变量没有用于保存工作簿。这一步是必需的吗?
    • @user5249203 不,Map 不保存文件,只是为saveWorkbook 准备数据。
    • createSheet 对我不起作用(可能是因为它已经 3 年了)我不得不使用 addWorksheet
    【解决方案2】:

    这是使用 openxlsx 的解决方案:

    ## create data;
    dataframes <- split(iris, iris$Species)
    
    # create workbook
    wb <- createWorkbook()
    
    #Iterate the same way as PavoDive, slightly different (creating an anonymous function inside Map())
    Map(function(data, nameofsheet){     
    
        addWorksheet(wb, nameofsheet)
        writeData(wb, nameofsheet, data)
    
    }, dataframes, names(dataframes))
    
    ## Save workbook to excel file 
    saveWorkbook(wb, file = "file.xlsx", overwrite = TRUE)
    

    .. 然而,openxlsx 也可以为此使用它的函数 openxlsx::write.xlsx,因此您只需为对象提供数据帧列表和文件路径,并且 openxlsx 足够聪明,可以将列表创建为xlsx 文件中的工作表。我在这里使用 Map() 发布的代码是如果您想以特定方式格式化工作表。

    【讨论】:

      【解决方案3】:

      假设您的数据框列表称为Lst,而您要保存到的工作簿称为wb.xlsx。然后你可以使用:

      library(xlsx)
      counter <- 1
      for (i in length(Lst)){
         write.xlsx(x=Lst[[i]],file="wb.xlsx",sheetName=paste("sheet",counter,sep=""),append=T)
         counter <- counter + 1
      }
      

      G

      【讨论】:

      • 我现在看到了,我正在编辑我的答案,离开了一段时间然后回来,没有检查是否有任何更新。我的错。
      • 如果你用for (i in 1:length(Lst))开始你的循环,真的需要counter吗?似乎为for loop 设置了while loop
      【解决方案4】:

      以下代码完美运行,来自:https://rpubs.com/gbganalyst/RdatatoExcelworkbook

      packages <- c("openxlsx", "readxl", "magrittr", "purrr", "ggplot2")
      
      if (!require(install.load)) {
        install.packages("install.load")
      }
      install.load::install_load(packages)
      
      list_of_mydata
      
      write.xlsx(list_of_mydata, "Excel workbook.xlsx")
      

      【讨论】:

      • 对于这个问题,这是一个非常好的、简单的答案,如果你稍微编辑一下,可能会得到更多的支持。您需要安装和加载四个额外的包,这些包对于这个答案是不必要的。你只需要openxlsx。我建议将此答案更改为更简单的答案:library(openxlsx); write.xlsx(list_of_mydata, "Excel workbook.xlsx")
      • 另外值得注意的是,write.xlsx 将使用列表中的名称作为输出 Excel 文件中的工作表名称。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2016-05-15
      相关资源
      最近更新 更多