#r #excel #append
Вопрос:
Я пытаюсь добавить несколько листов из нескольких файлов Excel. Например, каждый файл Excel содержит 10 листов (разного формата), но 10 листов файла Excel имеют те же имена и формат, что и связанные 10 листов другого файла Excel. По сути, каждый файл Excel содержит различные типы информации о разных странах, но типы собираемой информации одинаковы для каждой страны (население, индекс загрязнения, ВВП и т.д.). И у меня много стран, поэтому я подумываю об использовании цикла.
Я использую «report_1h» в качестве основного файла Excel и добавляю листы других файлов Excel в листы основного файла.
library(rio)
x1_data <- import_list("report_1h.xlsx")
report_list <- list.files(path = 'E:/Report_folder', pattern = '*.xlsx')
sheet_ <- data.frame()
for (file in report_list){
book <- import_list(file)
for (i in 1:31){
sheet_[i] <- rbind(x1_data[[i]][,],book[[i]][,])
x1_data[[i]][,] <- sheet_[i]
}
}
Цикл предназначен для добавления листов из каждого файла Excel к листам основного файла «report_1h». Но это дает ошибку:
Error in `[<-.data.frame`(`*tmp*`, i, value = c("Data Source(s):", "Data Source(s):", :
replacement has 2 rows, data has 0
Может кто-нибудь сказать мне, почему?
Комментарии:
1. Извините, в каждом файле Excel 31 лист, а не 10 листов.
2. Итак, если у вас есть 10 файлов Excel, каждый из которых содержит 31 лист. Вы хотите объединить все листы 1 из 10 файлов в одном кадре данных, затем 10 файлов из листа 2 в другом, и аналогично у вас будет 31 кадр данных в конце?
3. Да, я хочу объединить все листы 1 из всех 10 файлов Excel вместе, все листы 2 из всех 10 файлов Excel. Так что в итоге у меня 31 кадр данных!
Ответ №1:
Вот способ сделать это —
library(tidyverse)
#get the all the filenames
report_list <- list.files(path = 'E:/Report_folder', pattern = '*.xlsx
Комментарии:
1. Спасибо, я скоро попробую!
)
#Create a list of dataframes
map(report_list, function(x) {
sheets <-excel_sheets(x)
map(sheets, function(y) read_excel(x, y))
}) %>% transpose() %>%
map(bind_rows) -> result
#assign sheet names
names(result) <- paste0('Sheet', seq_along(result))
#Write master excel file
writexl::write_xlsx(result, 'master_excel.xlsx')
Комментарии:
1. Спасибо, я скоро попробую!