#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 отлично работает.