0

我想使用 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 文件。但我希望这适用于文件夹中的所有文件。欢迎任何建议!

4

2 回答 2

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)

为您的问题围绕工作表部分进行循环很简单。

于 2017-11-23T00:42:14.800 回答
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))}
于 2017-11-24T11:04:28.283 回答