Попробуйте сделать обертку вокруг readWorksheet()
. Это сохранит имя файла в переменной Country
и имя листа в Year
. Вы должны будете сделать некоторое регулярное выражение для файла, хотя, чтобы получить только код.
Вы также можете пропустить оболочку и просто добавить строку mutate()
в вашей текущей функции. Обратите внимание, что для этого используется пакет dplyr
, на который вы уже ссылались.
read_worksheet <- function(sheet, wb, file) {
readWorksheet(wb, sheet) %>%
mutate(Country = file,
Year = sheet)
}
Итак, вы можете сделать что-то подобное в уже имеющейся функции.
rbindAllSheets <- function(file) {
wb <- loadWorkbook(file)
removeSheet(wb, sheet = 1)
sheets <- getSheets(wb)
do.call(rbind,
lapply(sheets, read_worksheet, wb = wb, file = file)
)
}
Как другойобратите внимание, bind_rows()
- это еще одна dplyr
функция, которая может заменить ваши do.call(rbind, ...)
звонки.
bind_rows(lapply(sheets, read_worksheet, wb = wb, file = file))