Записать фреймы данных из двух списков на два отдельных листа файла Excel, используя семейство apply
Я хотел бы использовать семейство 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 ответа
Вот мое решение:
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))}
Из документации по 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)
Обернуть петлю вокруг раздела листа для вашей проблемы просто.