Ответ 1
С помощью list.files
вы можете создать список всех имен файлов в вашем рабочем каталоге. Затем вы можете использовать lapply
для lapply
этого списка и прочитать каждый файл с read_excel
функции read_excel
из пакета readxl
:
library(readxl)
file.list <- list.files(pattern='*.xlsx')
df.list <- lapply(file.list, read_excel)
Этот метод также может использоваться с другими функциями чтения файлов, такими как read.csv
или read.table
. Просто замените read_excel
на соответствующую функцию чтения файлов и убедитесь, что вы используете правильный шаблон в list.files
.
Если вы также хотите включить файлы в подкаталоги, используйте:
file.list <- list.files(pattern='*.xlsx', recursive = TRUE)
Другие возможные пакеты для чтения Excel файлов: openxlsx & xlsx
Предположим, что столбцы одинаковы для каждого файла, вы можете связать их вместе в одном bind_rows
с помощью bind_rows
из dplyr:
library(dplyr)
df <- bind_rows(df.list, .id = "id")
или с rbindlist
из data.table:
library(data.table)
df <- rbindlist(df.list, idcol = "id")
Оба имеют возможность добавить id
столбца для идентификации отдельных наборов данных.
Обновление. Если вы не хотите использовать числовой идентификатор, просто используйте sapply
с simplify = FALSE
чтобы прочитать файлы в file.list
:
df.list <- sapply(file.list, read.csv, simplify=FALSE)
При использовании bind_rows
из dplyr или rbindlist
из data.table столбец id
теперь содержит имена файлов.
Еще один подход использует purrr
-package:
library(purrr)
file.list <- list.files(pattern='*.csv')
file.list <- setNames(file.list, file.list) # only needed when you need an id-column with the file-names
df <- map_df(file.list, read.csv, .id = "id")
Другие подходы к получению именованного списка: если вы не хотите использовать только числовой идентификатор, вы можете назначить имена файлов в кадры данных в списке, прежде чем связывать их вместе. Есть несколько способов сделать это:
# with the 'attr' function from base R
attr(df.list, "names") <- file.list
# with the 'names' function from base R
names(df.list) <- file.list
# with the 'setattr' function from the 'data.table' package
setattr(df.list, "names", file.list)
Теперь вы можете связать список файлов данных вместе в одном rbindlist
с помощью rbindlist
из data.table или bind_rows
из dplyr. В столбце id
теперь будут имена файлов вместо числового идентификатора.