Подтвердить что ты не робот

Импорт большого необычного файла в 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 акции одновременно.

4b9b3361

Ответ 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

Итак, вы можете пройти через все строки, проверить для каждой строки, что это значит, а затем обрабатывать или сохранять содержимое строки, как вам нравится. (Регулярные выражения также полезны для разделения данных в одной строке...)