代码之家  ›  专栏  ›  技术社区  ›  ainour

使用apply family将两个列表中的数据框写入excel文件的两个单独的工作表中

  •  0
  • ainour  · 技术社区  · 8 年前

    我想使用apply系列函数将每个文件从一个目录复制到第二个目录中每个文件的第二页。

    我尝试了很多事情,最后完成了以下工作,但只针对目录中的一个文件。如何将其应用于该文件夹中的所有文件?

    setwd(".../r_path//390")
    l1 <- list.files(pattern='*.xlsx')
    r1 = lapply(l1, read.xlsx, sheetIndex=1, header=TRUE)
    names(r1) <- l1
    s1 = split(r1, names(r1))
    
    setwd(".../r_path//390de")
    l2 <- list.files(pattern='*.xlsx')
    r2 = lapply(l2, read.xlsx, sheetIndex=1, header=TRUE)
    names(r2) <- l2
    s2 = split(r2, names(r2))
    
    library(plyr)
    library(xlsx)
    l_ply (r1[1], function(x) write.xlsx(x, 
                   file =paste0(names(s2[[1]])), sheetName = "TECO", 
                   append = TRUE, row.names = FALSE))
    

    目录的第一个excel文件作为第二张图纸复制到另一个excel文件。但我希望这适用于文件夹中的所有文件。欢迎任何建议!

    2 回复  |  直到 4 年前
        1
  •  0
  •   Stephen McNeill    8 年前

    从XLConnect的文档中,最简单的方法是首先创建工作簿(使用loadWorkbook()),然后对于要创建的每个工作表,使用createSheet()在工作簿中创建工作表,然后将数据写入使用writeWorksheet()创建的工作表中,以及创建的工作簿和工作表对象。在循环结束时,调用saveWorkbook()将结果写入Excel文件。该过程如下所示:

    # Create a workbook (if it doesn't currently exist it will be created)
    wb <- loadWorkbook("myexcelfile.xlsx",create=TRUE)
    # Create a worksheet within the workbook
    createSheet(wb,name="worksheet1")
    # Write a dataframe called data_to_write to the new worksheet
    writeWorksheet(wb,data_to_write,sheet="worksheet1")
    # Write the Excel file
    saveWorkbook(wb)
    

    围绕您的问题的工作表部分包装一个循环很简单。

        2
  •  0
  •   ainour    8 年前

    以下是我的解决方案:

    for (i in names(r1)) {
    l_ply (r1[i], function(x) write.xlsx(x,file =paste0(names(s2[[i]])),
     sheetName = "TECO", append = TRUE, row.names = FALSE))}