这里是第一次发布海报,所以我会尝试在我需要的帮助下尽可能清楚。我是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为这些添加列,所以我可以更有条理的方式处理数据。
导入此类数据的最佳方式是什么,还可以创建某种形式的结构 - 例如,在数据行中使用唯一ID信息来分析1个库存。
答案 0 :(得分: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()
的模式为表结构构建其他函数和相同的东西。
答案 1 :(得分:0)
您可以将readLines()
命令与正则表达式结合使用。要获取有关正则表达式的更多信息,请查看grep()
> ?grep
因此,您可以查看所有行,检查每行的含义,然后根据需要处理或存储行的内容。 (正则表达式也可用于在一行内拆分数据......)