2013-02-24 3 views
2

У меня есть более 1000 наборов данных я хотел бы загрузить в R и имя каждого из них в отдельности, как они будут загружены в я обнаружил, что, чтобы загрузить их можно использовать команды:загрузки и именование нескольких файлов в R

temp = list.files(pattern="*.csv") 

for (i in 1:length(temp)) assign(temp[i], read.csv(temp[i])) 

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

+1

Как вы хотите назвать их? Этот код создаст 'data.frame' с тем же именем, что и файл. – iTech

+1

Обратите внимание, что если вы когда-либо захотите их перебрать, вам лучше использовать 'x = lapply (temp, read.csv); имена (x) = temp'. Если вы хотите получить к ним доступ случайным образом, то это будет хорошо. –

+0

Все имена моих файлов содержат в них номера. Например, с 1988 по 2006 год, поэтому, когда я нахожу их называть, он просто говорит «непредвиденная константа» и не показывает мне данные. Я бы назвал их 1august2006 или что-то вроде этой формы для каждого файла. – user1836894

ответ

-1

Лучше получить ваш data.frame агрегируются в списке, за исключением. Используя цикл sapply, вы получите список имен с именами файлов.

temp = list.files(pattern="*.csv") 
named.list <- sapply(temp, read.csv) 

EDIT

Чтобы избежать случая кадров данных с тем же числом столбцов, вам необходимо установить simplify=FALSE

named.list <- sapply(temp, read.csv,simplify=FALSE) 
+1

Думаю, вы захотите включить 'simplify = FALSE' с sapply здесь. И предположительно присваивать результат чему-то, чтобы использовать его в последующих утверждениях. – regetz

+1

Значение по умолчанию для упрощения - TRUE по R 2.15.2 и все предыдущие версии, которые я могу вспомнить. Следовательно, 's' в 'sapply', нет? Если все кадры данных для чтения имеют одинаковое количество столбцов, т. Е. Все являются списками равной длины, результат будет «упрощенной» матрицей списков, а не списком кадров данных. – regetz

+0

@regetz Почему вы хотите использовать 'simplify = FALSE'? вы проверили этот код, чтобы увидеть его выход? здесь вы получаете тот же результат с упрощением TRUE или FALSE. – agstudy

0

Вам просто нужен список имен data.frame, похожих на ваш список имен файлов. Тогда все остальное почти то же самое, за исключением небольшого изменения в вашем assign заявлении

temp = list.files(pattern="*.csv") 

    # just an example 
    dataNames <- paste0(c("dataSource_", 1:length(temp))) 

    # then everything else is almost the same 
    for (i in 1:length(temp)) 
     assign(dataNames[i], read.csv(temp[i])) 
Смежные вопросы