R: генерировать динамические имена для фреймов данных

#r #dataframe #dynamic #names

#r #фрейм данных #динамический #имена

Вопрос:

Мне нужно прочитать несколько файлов csv из каталога и сохранить все данные в отдельном фрейме данных. Имена файлов находятся в символьном векторе:

 lcl_forecast_data_files <- dir(lcl_forecast_data_path, pattern=glob2rx("*.csv"), full.names=TRUE)
 

Например: «fruc2021.csv», «gem2020.csv», «strb2021.csv».

Пока я читаю файлы шаг за шагом:

 fruc2021 <- read_csv2("fruc2021.csv")
gem2020 <- read_csv2("gem2020.csv")
strb2010 <- read_csv2("strb2021.csv")
 

Но в каталоге и подкаталогах гораздо больше файлов. Читать их все по одному очень утомительно.

Теперь я уже немного поэкспериментировал с функцией map, но я еще не понял, как автоматически генерировать имена фреймов данных из имен файлов.

Первая простая попытка была:

 lcl_forecast_data <- lcl_forecast_data_files %>% 
  map(
    function(x) {
      str_replace(basename(x), ".csv","") <- read_csv2(x)
    }
  )
 

Но это не сработало 🙁

Возможно ли вообще генерировать имена для фреймов данных подобным образом? Или есть другие, более простые возможности?

Приветствую, Бенне

Переведено с www.DeepL.com/Translator (бесплатная версия)

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

1. Вы рассматривали возможность использования list.files(pattern = "\.csv$", recursive = TRUE, full.names = TRUE) ?? Затем вы могли бы использовать lapply для чтения файлов.

Ответ №1:

Если вы не хотите использовать список и lapply, как предложил @Onyambu, вы можете использовать assign() для генерации фреймов данных.

 filenames <- c("fruc2021.csv", "gem2020.csv", "strb2021.csv")

for (i in filenames) {
    assign(paste('',gsub(".csv","",i),sep=''),read.csv(i))
}
 

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

1. Вау, так просто, спасибо pookpash. Цикл for отлично работает.