Как добавить новый лист к существующей книге Excel?

#r

#r

Вопрос:

Я экспортировал свой фрейм данных в 3 разные книги Excel на основе их «Страны», и у меня есть другой фрейм данных, в котором указаны те же страны, и я хотел бы, чтобы они были экспортированы в текущую существующую книгу, в которой я создал.

 #Create Dataframe
df = data.frame(Year = c(2018,2019,2020,2018,2019,2020,2018,2019,2020),
                Country = c("Germany","Germany","Germany", "Japan", "Japan", "Japan",  "Thailand", "Thailand", "Thailand"), 
                Count = c(17, 15, 60, 23, 25, 60, 50, 18, 31))

df2 = data.frame(Country = c("Germany","Germany","Germany", "Japan", "Japan", "Japan",  "Thailand", "Thailand", "Thailand"), 
                Count = c("James", "Gordon", "Jackson", "Harrison", "Reid", "Ashen", "Lewis", "Maokai", "Federick"))

#Split dataframe according to their Countries
splitdf = split(df, df$Country)

#Write workbook
save_data <- function(df, name) {
  wb <- createWorkbook()
  addWorksheet(wb, name)
  writeDataTable(wb, name, df, tableStyle = "TableStyleLight9")
  saveWorkbook(wb, paste0(name, ".xlsx"), overwrite = TRUE)
}

#Print workbook
mapply(
  save_data,
  splitdf,
  names(splitdf)
)

 

Есть ли способ добавить df2 на новый лист на основе его уникальных стран в существующие книги, которые я создал, без перезаписи исходного файла?

Комментарии:

1. Вы имеете в виду добавление дополнительного листа в каждую книгу с данными, поступающими из стран df2 ?

2. @Duck да, я хотел бы добавить дополнительный лист в каждую книгу с данными из df2

Ответ №1:

Попробуйте это:

 library(openxlsx)
#Create lists
L1 <- split(df,df$Country)
L2 <- split(df2,df2$Country)
#Write workbook
save_data <- function(x,y, name) {
  wb <- createWorkbook()
  addWorksheet(wb, name)
  writeDataTable(wb, name,x , tableStyle = "TableStyleLight9")
  addWorksheet(wb, paste0(name,'.df2'))
  writeDataTable(wb, paste0(name,'.df2'), y,
                 tableStyle = "TableStyleLight9")
  saveWorkbook(wb, paste0(name, ".xlsx"), overwrite = TRUE)
}
#Print workbook
mapply(
  save_data,
  x=L1,y=L2,name=names(L1)
)
 

Некоторые результаты:

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Отлично, именно то, что мне было нужно! Приветствия

2. @realbeast91 Всегда рад помочь 🙂