2014-10-08 4 views
2

, поэтому у меня есть 29 файлов данных, которые я хочу загрузить в R. Файлы называются «1.csv», «2.csv» и т. Д. Вплоть до 29. Здесь код, изображающий то, что я пытаюсь сделать:Импорт .CSV, используя список в R

file.number <- c(1:29) 
"the value in file.number".data <- read.csv("the value in file.number"".csv") 

в основном я ищу способ загрузки кода на основе списка, и маркировать его соответствующим образом. Это возможно?

Любая помощь будет принята с благодарностью!

+4

'setNames (lapply (paste0 (1:29," .csv "), read.csv), paste0 (1:29," .data "))' может сделать это –

+0

Это сработало довольно красиво! Спасибо! – y3trgfhsfgr

+1

Рад, что это сработало, я добавил его в качестве ответа. –

ответ

4

Это, вероятно, работать

dfList <- setNames(lapply(paste0(1:29, ".csv"), read.csv), paste0(1:29, ".data")) 

Теперь у вас есть именованный список из 29 кадров данных. Затем вы можете получить доступ к каждому отдельному кадру данных с помощью оператора $, например. dfList$"4.data". Обратите внимание, что вам понадобятся кавычки или обратные ссылки, так как вы решили начать имена с цифры. Вы можете избежать этого, используя [[ для доступа к элементам, то есть dfList[["4.data"]], или изменить на разные имена, такие как paste0("data", 1:29), или любое имя, которое не начинается с цифры.

Другим вариантом был бы Map

Map(read.csv, paste0(1:29, ".csv")) 

Это будет автоматически устанавливать имена и имена файла считывается т.е. 1.csv, 2.csv и т.д. Но опять же, обратные кавычки или котировки будут необходимы для доступа к элементам с оператором $, потому что имена начинаются с цифр.

1
listwithdfs <- lapply(1:29, function(x) read.csv(paste0(x, ".csv")) ) 
names(listwithdfs) <- 1:29 

Лучше иметь только один объект в рабочем пространстве. теперь вы можете индексировать с

listwithdfs[[13]] 
+0

Я пробовал это, но по какой-то причине он предполагает наличие пробела между «1» и «.csv» «1 .csv». – y3trgfhsfgr

+0

Установка имен в виде чисел немного бессмысленна, когда вы просто используете индекс списка. –

+0

@BrettCochrane Похоже, вы использовали 'paste()' вместо 'paste0()'. Если вы используете 'paste()', вам нужно указать 'sep =" "'. – Gregor

Смежные вопросы