Чтение нескольких файлов в каталоге, начиная с определенной строки - PullRequest
2 голосов
/ 27 марта 2012

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

Я нашел, как читать отдельный файл с этим:

data = read.csv(file.choose (),  skip = 6 )  

или я могу прочитать несколько файлов, как это:

j = list.files()         
     d = lapply(j, read.csv)

Не могли бы вы помочь мне с тем, как я могу прочитать несколько файлов, начиная с 7-й строки?

Ответы [ 2 ]

6 голосов
/ 27 марта 2012

Просто объедините два. Вы можете передать именованные аргументы функции в lapply:

d <- lapply(j, read.csv, skip=6)
2 голосов
/ 27 марта 2012

В дополнение к ответу @ James, использование lapply считывает файлы только в список, а не в общий data.frame. Из твоего вопроса не очевидно, хочешь ли ты этого. Но я все равно добавлю это для полноты картины.

Чтобы иметь возможность определить, какому файлу изначально принадлежала строка в общем data.frame, я часто добавляю столбец с именем файла. В псевдокоде это будет выглядеть примерно так:

files = list.files()
data_list = lapply(files, function(f) {
     dat = read.csv(fname, skip = 6)
     dat$fname = fname
     return(dat)
   })
data_df = do.call("rbind", data_list)

В качестве альтернативы, вы можете использовать удивительную библиотеку plyr, которая делает то же самое в:

library(plyr)
files = list.files()
data_df = ldply(files, read.csv, skip = 6)

Я не тестировал этот псевдокод, поэтому, возможно, еще есть некоторые недостатки. Но вы поняли основную идею. Например, одной из проблем может быть то, что ldply не добавляет автоматически имя файла в виде столбца. Затем вам нужно использовать вызов функции, как я использовал lapply. В этом случае ldply спасет вас от шага do.call. Обратите внимание, что plyr поддерживает индикатор выполнения (хорошо для длинных процессов) и параллельной обработки.

Примечание:

  • Мне нравятся более описательные имена, чем j и d. Это облегчает чтение кода.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...