跳到大型txt文件中的某个位置

时间:2018-04-09 10:56:21

标签: r readr

我有超过100个.txt文件,我想在其上进行计算。这些文件包含凝视数据,该数据通过眼动仪收集。

数据的第一部分是校准部分。它只包含有限数量的变量。每一行看起来像这样(约20 000行):

Event: Data - startTime 1563518990 endTime 1563619015 Gaze 885.638118989 316.57751978

数据的第二部分包含凝视测试期间收集的实际凝视数据。它包含更多我感兴趣的变量。它看起来像这样:

Gaze Data - IviewTimestamp 649261961 OpenSesameTimeStamp 55191.0 GazeLeft 0.0 0.0 GazeRight 0.0 0.0 DistanceRight 530.630058679 DiameterLeft 4.89342033646 DiamaterRight 4.44607910548

但是,当我使用函数read_table2时,它只能找到校准过程中收集的变量。这是因为R只查看.txt文件的前1000行来确定变量。我希望它跳到包含“iviewTimestamp”的第一行,所以它只导入.txt文件的相关部分并自动找到正确的变量。由于每个主体的校准长度不相等,因此无法跳到固定的数字。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

近似:使用grep()查找所需字符串的第一个位置,然后使用read_table2的{​​{1}}参数。

skip

firstline <- grep("IviewTimestamp",readLines("file.txt"))[1] 读取文件的整个文本,作为字符向量(文件每行一个元素); readLines()返回包含指定字符串(或正则表达式)的行的索引; grep提取包含该字符串的 first 行的索引。现在您可以使用它来找到开始阅读的正确位置:

[1]

这是低效的(因为你需要两次读取文件),但我想每个文件花费的时间不到一秒。在Unix或类似Unix的操作系统上运行的笨重但更有效的解决方案是使用read_table2("file.txt", skip=firstline-1) 来运行外部(更高效)system()命令。

答案 1 :(得分:0)

我建议您导入数据并在之后整理,而不是阅读两次。

首先使用以下命令导入目录中的所有文件:

library(dplyr)
library(purrr)
df <- map_df(list.files(path = path, pattern = '*.txt', full.names = TRUE), read_table2)

值得注意的是,您可以在调用'read_table2'后添加col_names等可选参数。

导入所有文本文件后,可以对其进行过滤:

filter(df, 'timeStampColumnName' == IviewTimestamp)