Прочитайте несколько файлов CSV в отдельных кадрах данных

Предположим, у нас есть файлы file1.csv , file2.csv , … и file100.csv в каталоге C: \ R \ Data, и мы хотим прочитать их все в отдельных кадрах данных (например, file1 , file2 , … и file100 ).

Причина этого заключается в том, что, несмотря на наличие похожих имен, у них есть разные файловые структуры, поэтому не так полезно иметь их в списке.

Я мог бы использовать lapply но он возвращает один список, содержащий 100 фреймов данных. Вместо этого я хочу, чтобы эти фреймы данных были в глобальной среде.

Как читать несколько файлов непосредственно в глобальной среде? Или, альтернативно, как мне распаковать содержимое списка фреймов данных?

Быстрый проект, непроверенный:

  1. Используйте list.files() aka dir() для динамического создания списка файлов.

  2. Это возвращает вектор, просто пробегает вектор в цикле for .

  3. Прочтите i-й файл, затем используйте функцию assign() чтобы поместить содержимое в новую переменную file_i

Это должно сделать трюк для вас.

Спасибо всем за ответ.

Для полноты здесь мой окончательный ответ для загрузки любого количества (tab) файлов с разделителями, в этом случае с 6 столбцами данных каждый, где столбец 1 является символом, 2 является фактором и остаточным числом:

 ##Read files named xyz1111.csv, xyz2222.csv, etc. filenames <- list.files(path="../Data/original_data", pattern="xyz+.*csv") ##Create list of data frame names without the ".csv" part names <-substr(filenames,1,7)) ###Load all files for(i in names){ filepath <- file.path("../Data/original_data/",paste(i,".csv",sep="")) assign(i, read.delim(filepath, colClasses=c("character","factor",rep("numeric",4)), sep = "\t")) } 

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

 for(i in 1:100) { oname = paste("file", i, sep="") assign(oname, read.csv(paste(oname, ".txt", sep=""))) } 

Не. Держите их как список. Это путь.

Вот способ распаковать список data.frames, используя только lapply

 filenames <- list.files(path="../Data/original_data", pattern="xyz+.*csv") filelist <- lappy(filenames, read.csv) #if necessary, assign names to data.frames names(filelist) <- c("one","two","three") #note the invisible function keeps lapply from spitting out the data.frames to the console invisible(lapply(names(filelist), function(x) assign(x,filelist[[x]],envir=.GlobalEnv))) 

Этот ответ предназначен как более полезное дополнение к ответу Хэдли.

В то время как OP специально хотел, чтобы каждый файл считывался в свое рабочее пространство R как отдельный объект, многие другие люди, наивно приземляющиеся по этому вопросу, могут подумать , что это то, что они хотят делать, когда на самом деле им лучше читать файлы в одном список фреймов данных.

Итак, для записи, вот как вы можете это сделать.

 #If the path is different than your working directory # you'll need to set full.names = TRUE to get the full # paths. my_files <- list.files("path/to/files") #Further arguments to read.csv can be passed in ... all_csv <- lapply(my_files,read.csv,...) #Set the name of each list element to its # respective file name. Note full.names = FALSE to # get only the file names, not the full path. names(all_csv) <- gsub(".csv","", list.files("path/to/files",full.names = FALSE), fixed = TRUE) 

Теперь любой из файлов может ссылаться на my_files[["filename"]] , что на самом деле не намного хуже , просто имея отдельные переменные filename в вашей рабочей области, и часто это намного удобнее.

Простым способом доступа к элементам списка из глобальной среды является attach списка. Обратите внимание, что это фактически создает новую среду в пути поиска и копирует в нее элементы вашего списка, поэтому вы можете удалить исходный список после прикрепления, чтобы предотвратить наличие двух потенциально разных копий.

Чтение всех CSV-файлов из папки и создание ватронов, таких же, как имена файлов:

 setwd("your path to folder where CSVs are") filenames <- gsub("\\.csv$","", list.files(pattern="\\.csv$")) for(i in filenames){ assign(i, read.csv(paste(i, ".csv", sep=""))) } 
 #copy all the files you want to read in R in your working directory a <- dir() #using lapply to remove the".csv" from the filename for(i in a){ list1 <- lapply(a, function(x) gsub(".csv","",x)) } #Final step for(i in list1){ filepath <- file.path("../Data/original_data/..",paste(i,".csv",sep="")) assign(i, read.csv(filepath)) } 
  • Создайте data.frame, где столбец - это список
  • Разреженная matrix к кадру данных в R
  • Вызовите применимую функцию для каждой строки данных с несколькими аргументами из каждой строки
  • Почему суммировать или мутировать не работать с group_by при загрузке `plyr` после` dplyr`?
  • Преобразование данных из длинного формата в широкоформатный с несколькими столбцами измерения
  • Точка, обрезанная по оси x в ggplot
  • Уровни фактора падения в подмножестве данных
  • Как добавить общую метку в грани в ggplot2?
  • Как найти индексы верхних 10 000 элементов в симметричной матрице (12k X 12k) в R
  • Использование динамических имен столбцов в `data.table`
  • Как удалить пространство между осью и областью в ggplot2?
  • Interesting Posts

    Восстановление массива RAID 0 (без отказов дисков), если я знаю размер блока и начальное смещение?

    MIcrosoft Word 2003 – Можете ли вы импортировать стили заголовков из других документов Microsoft Word?

    Как передать массив в качестве аргумента функции в Bash

    Как выровнять мертвую точку изображения с помощью бутстрапа

    Rails 4 изображения не загружаются на героку

    Размещение фонового изображения

    Самый эффективный способ конкатенации строк в JavaScript?

    Почему глобальные и статические переменные инициализируются значениями по умолчанию?

    Добавить перекрестную ссылку с номерами ссылок в диапазоне в Word

    автоматически resize текста (размер шрифта) при изменении размера windows?

    Почему Facebook Graph API говорит, что моя учетная запись неактивна?

    Как вставить элемент после другого элемента в JavaScript без использования библиотеки?

    Наследуют ли подclassы частные поля?

    Разница между ключом раздела, составным ключом и ключом кластеризации в Cassandra?

    Получить идентификатор последней вставленной записи в oracle db

    Давайте будем гением компьютера.