使用apply family将数据帧从两个列表写入两个单独的excel文件表

时间:2017-11-21 09:00:47

标签: split plyr xlsx purrr pmap

我想使用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 个答案:

答案 0 :(得分:0)

从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)

围绕工作表部分圈出问题很简单。

答案 1 :(得分:0)

这是我的解决方案:

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))}