2014-10-12 1 views
0

Я хочу прочитать большой файл, используя read.csv в R. Теперь один способ получить строки, соответствующие одному шаблону, - сначала получить все строки в data-frame, а затем фильтровать только требуемые строки. Проблема с этим подходом заключается в том, что размер файла слишком велик, и все данные могут не помещаться в памяти на некоторых машинах. Так можно ли использовать grep или что-то подобное вместе с read.csv, чтобы получить только несколько строк, которые представляют интерес?Как использовать read.csv для чтения только тех строк, которые соответствуют некоторому регулярному выражению?

+1

Вы можете использовать 'grep' (или' awk') в оболочке/терминал, чтобы отфильтровать определенные строки, отправить в новый файл, а затем прочитать файл в R. В противном случае вы можете считывать данные кусками затем процеживают куски –

+0

Спасибо за вашу помощь @RichardScriven. Я смотрел, если что-нибудь доступно в 'R' для этого, используя' read.csv' и 'regex' или что-то подобное. – Sangram

+1

Вы можете использовать команды оболочки с 'fread' из' data.table'. См. http://stackoverflow.com/questions/22229109/r-data-table-fread-command-how-to-read-large-files-with-irregular-separators для примера. –

ответ

3

Вы не можете использовать read.table и его производных для этой цели. Однако вы можете использовать readLines для чтения данных в кусках и применить свое регулярное выражение к каждому элементу, что соответствует строке.

Другой альтернативой было бы использовать базу данных как основы. Package sqldf может считывать файл csv в базу данных SQL. Вы можете использовать SQL-запрос для чтения только желаемых строк.

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