Импорт большого необычного файла в R
Первый плакат здесь, поэтому я постараюсь сделать как можно яснее на помощь, в которой я нуждаюсь. Я новичок в R, и это мой первый реальный независимый опыт программирования.
У меня есть данные о запасах акций около 2,5 лет, каждый день имеет свой собственный файл. Файлы имеют .txt и состоят из приблизительно 20-30 миллионов строк, и в среднем я думаю, что 360mb каждый. Пока я работаю по одному файлу. Мне не нужны все данные, содержащиеся в этих файлах, и я надеялся, что смогу использовать программирование для минимизации моих файлов.
Теперь моя проблема в том, что у меня возникают трудности с написанием правильного кода, поэтому R понимает, что мне нужно.
Позвольте мне сначала показать вам некоторые данные, чтобы вы могли получить представление об форматировании.
M977
R 64266NRE1VEW107 FI0009653869 2EURXHEL 630 1
R 64516SSA0B 80SHB SE0002798108 8SEKXSTO 40 1
R 645730BBREEW750 FR0010734145 8EURXHEL 640 1
R 64655OXS1C 900SWE SE0002800136 8SEKXSTO 40 1
R 64663OXS1P 450SWE SE0002800219 8SEKXSTO 40 1
R 64801SSIEGV LU0362355355 11EURXCSE 160 1
M978
Другая информация:
M732
D 3547742
A 3551497B 200000 67110 02800
D 3550806
D 3547743
A 3551498S 250000 69228 09900
Итак, как вы можете видеть, каждая строка начинается с буквы. Каждая буква означает, что означает линия. Например, R
означает сообщение каталога заказа книги, M
означает миллисекунды после последней секунды, H
означает сообщение о торговле акциями. Всего использовано 14 разных букв.
Я использовал функцию readLines
для импорта данных в R. Это, однако, кажется, занимает очень много времени для обработки R, когда я хочу работать с данными.
Теперь я хотел бы написать какую-то функцию If, которая говорит, что если первая буква R
, то из смещения с 1 по 4 код означает идентификатор сегмента рынка и т.д. и имеет R добавить столбцы к ним, чтобы я мог работать с данными более структурированным способом.
Каков наилучший способ импорта таких данных, а также создание какой-либо формы структуры, т.е. использовать уникальную идентификационную информацию в строке данных для анализа 1 акции одновременно.
Ответы
Ответ 1
Вы можете попробовать что-то вроде этого:
options(stringsAsFactors = FALSE)
f_A <- function(line,tab_A){
values <- unlist(strsplit(line," "))[2:5]
rbind(tab_A,list(name_1=as.character(values[1]),name_2=as.numeric(values[2]),name_3=as.numeric(values[3]),name_4=as.numeric(values[4])))
}
tab_A <- data.frame(name_1=character(),name_2=numeric(),name_3=numeric(),name_4=numeric(),stringsAsFactors=F)
for(i in readLines(con="/home/data.txt")){
switch(strsplit(x=i,split="")[[1]][1],M=cat("1\n"),R=cat("2\n"),D=cat("3\n"),A=(tab_A <- f_A(i,tab_A)))
}
И замените cat()
на различные функции, которые добавляют значения к каждому типу data.frame. Используйте шаблон функции f_A()
, чтобы построить другие функции и то же самое для структуры таблицы.
Ответ 2
Вы можете комбинировать команду readLines()
с регулярными выражениями. Чтобы получить дополнительную информацию о регулярных выражениях, просмотрите сайт справки R для grep()
> ?grep
Итак, вы можете пройти через все строки, проверить для каждой строки, что это значит, а затем обрабатывать или сохранять содержимое строки, как вам нравится. (Регулярные выражения также полезны для разделения данных в одной строке...)