使用R读取其中包含许多2D数据集的文本文件

rob*_*ntw 3 import r

我有一个数据文件,我想读入R,如下所示:

STARTOFDATA 2011-06-23 35
143 6456 23 646 123.53A 864.95 23B
343 634 24 545 65.3 235.2 94C
...
524 542 45 245.4 24 245A 45B
STARTOFDATA 2011-06-24 84
245 6532 24.4 624.2 542 23B 35A
241 4532 13.5 235.12 534.23 54 32B
etc...
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它基本上是一个2D数据集(标题行之间的每一列都是一个不同的变量),它存储了由STARTOFDATA行指定的多个日期,这些日期分割了不同的日期.标题行末尾的数字是下一个标题行之前的数据行数.A,B和C等是质量控制信息,基本上可以丢弃 - 可能就像gsub我从文件中得到的文本一样.

我的问题是:我应该如何将其读入R?理想情况下,我希望能够读取整个文件或指定的日期(或日期范围).我应该指出该文件超过200,000行!

我已经做了一些思考和研究,但似乎无法找到一种合理的方法来做到这一点.

据我所知,有两个问题:

  1. 如何读取文件:有没有办法在R中的文件中移动指针?我曾经使用的其他一些语言都有这种能力,在这种情况下我可以阅读第一行,阅读日期,看看我是否想要那个日期,然后如果没有跳过结尾处列出的行数标题(最好不要读它们!)并读取下一个标题行.我在文档中看不到任何关于函数的内容,这些函数可以让我在不实际阅读的情况下执行此操作.似乎如果我手动创建一个连接对象,那将跟踪我在文件中的位置,并且我可以使用readLines(在循环中)的重复调用来读取文件的块,如果它们被读取则丢弃它们不需要.

  2. 如何存储数据:理想情况下,我想在数据框中存储每个日期的2D数据集,然后我可以相当容易地继续对它们进行任何分析.但是,我应该如何存储这些2D数据集的负载?我正在考虑一个数据框列表,但这是最好的方法(在能够明智地索引列表方面)?

任何想法或意见将不胜感激.

And*_*rie 6

用于readLines将数据作为字符向量读取,然后操作此向量.下面是一些将您的示例数据拆分为块列表的代码:

使用readLines读取数据:

x <- readLines(textConnection(
"STARTOFDATA 2011-06-23 35
143 6456 23 646 123.53A 864.95 23B
343 634 24 545 42 65.3 235.2 94C
...
524 542 45 245.4 24 542.54 245A 45B
STARTOFDATA 2011-06-24 84
245 6532 24.4 624.2 542 23B 35A
241 4532 13.5 235.12 534.23 54
etc..."))
Run Code Online (Sandbox Code Playgroud)

确定位置STARTOFDATA,然后拆分成块列表:

positions <- c(grep("STARTOFDATA", x), length(x)+1)
lapply(head(seq_along(positions), -1), 
       function(i)x[positions[i]:(positions[i+1]-1)])

[[1]]
[1] "STARTOFDATA 2011-06-23 35"          
[2] "143 6456 23 646 123.53A 864.95 23B" 
[3] "343 634 24 545 42 65.3 235.2 94C"   
[4] "..."                                
[5] "524 542 45 245.4 24 542.54 245A 45B"

[[2]]
[1] "STARTOFDATA 2011-06-24 84"      
[2] "245 6532 24.4 624.2 542 23B 35A"
[3] "241 4532 13.5 235.12 534.23 54" 
[4] "etc..."  
Run Code Online (Sandbox Code Playgroud)

现在,每个数据块都是列表中的元素,您可以根据需要使用秒进行处理 lapply()