Я должен загрузить данные для моей магистерской работы в R-dataframe, который хранится в 74 рабочих книгах Excel. Каждая рабочая тетрадь имеет 4 рабочих листа, которые называются: животные, особенности, глаголы, глаголы. Все рабочие листы имеют одинаковые 12 переменных (время начала, слово, время окончания, идентификатор и т. Д.). Я хочу объединить каждый рабочий лист под предыдущим, поэтому итоговый фрейм данных должен иметь 12 столбцов, а количество строк зависит от того, сколько ответов дали 74 предмета.
Я хочу использовать readxl-пакет tidyverse и следую этой статье: https://readxl.tidyverse.org/articles/articles/readxl-workflows.html#csv-caching-and-iterating-over-sheets.
Первая проблема, с которой я сталкиваюсь, заключается в том, как прочитать все 4 листа с помощью read_excel (путь, лист = "животные", "особенности", "r_words", "глаголы"). Это работает только с первым листом, поэтому я попытался составить список со всеми именами листов (объектный лист). Это тоже не работает. И когда я пытаюсь использовать следующий код только с одним листом, следующая строка выдает ошибку:
Ошибка в базовом имени (.): Ожидается символьный векторный аргумент
Итак, вот часть моего кода, мы надеемся выполнить требования:
filenames <- list.files("data", pattern = '\\.xlsm',full.names = TRUE)
# indices
subfile_nos <- 1:length(filenames)
# function to read all the sheets in at once and cache to csv
read_then_csv <- function(sheet, path) {
for (i in 1:length(filenames)){
sheet <- excel_sheets(filenames[i])
len.sheet <- 1:length(sheet)
path <- read_excel(filenames[i], sheet = sheet[i]) #only reading in the first sheet
pathbase <- path %>%
basename() %>% #Error in basename(.) : a character vector argument expected
tools::file_path_sans_ext()
path %>%
read_excel(sheet = sheet) %>%
write_csv(paste0(pathbase, "-", sheet, ".csv"))
}
}