I have this df:
country | city |
---|---|
Canada | Montreal |
Canada | Ottawa |
Canada | Toronto |
Argentina | Cordoba |
Argentina | Mendoza |
Chile | Santiago |
And I would like to create a xlsx file with something like
I know this is possible by entering manually the cells' reference, but I have a lot of countries, and this would be unsettling. Is there a way I can group the country variable in one merged cell?
here is a reproductible code:
tibble::tibble(
country = c('Canada','Canada','Canada','Argentina','Argentina','Chile'),
city = c('Montreal','Ottawa','Toronto','Cordoba','Mendoza','Santiago')
)
CodePudding user response:
This could be achieved via openxlsx::mergeCells
. To this end I first create a list of the row indices to merge. Afterwards you could use e.g. lapply
to loop over the list and merge the cells for each country.
library(openxlsx)
# Create list of rows to merge. Note: DF should be ordered by country
to_merge <- split(seq_len(nrow(dat)), dat$country)
fn <- tempfile(".xlsx")
wb <- createWorkbook()
addWorksheet(wb, 1)
writeData(wb, sheet = 1, x = dat)
lapply(to_merge, function(x) mergeCells(wb = wb, sheet = 1, cols = 1, rows = 1 x))
saveWorkbook(wb, fn, overwrite = TRUE)