r - 将大型异常文件导入 R

标签 r import large-files

第一次在这里发布海报,所以我会尽量让自己清楚我需要的帮助。我对 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表示股票交易 Action 消息。总共使用了 14 个不同的字母。

我用过 readLines将数据导入 R 的函数。然而,当我想处理数据时,R 似乎需要很长时间来处理。

现在我想写一些 If 函数,如果第一个字母是 R然后从偏移量 1 到 4,代码表示市场分割标识符等,并让 R 向这些添加列,以便我可以以更结构化的方式处理数据。

导入此类数据以及创建某种形式的结构的最佳方法是什么 - 例如,使用数据行中的唯一 ID 信息一次分析 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()为表结构构造其他函数和相同的东西。

关于r - 将大型异常文件导入 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11669165/

相关文章:

Git lfs - "this exceeds GitHub' s 文件大小限制为 100.00 MB"

c++ - 如何在 Windows 上eekg() 超过 4GB 的文件?

r - R中正则表达式的奇怪行为

python - 如何在 Windows 上安装 Oauth2 安装(多个错误)

r - plotly :并排的条形图和饼图

python - 使用 python 将值导入 MySQL 数据库时出现 SQL 语法错误

Matlab:从一个文本文件导入多个数据集

java - 使用 Jena 解析 Java 中的大型 RDF 流

使用多因子预测器从 GLM 中删除截距

r - 是否可以通过 RPostgresql 运行 Postgres 反斜杠命令?