代码之家  ›  专栏  ›  技术社区  ›  Bart R

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

  •  3
  • Bart R  · 技术社区  · 6 年前

    我有100多个。我想对其进行计算的txt文件。这些文件包含用眼动跟踪器收集的凝视数据。

    数据的第一部分是校准部分。它只包含有限数量的变量。每行都是这样的(大约20000行):

    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只查看的前1000行。txt文件来确定变量。我希望它跳到包含“iviewTimestamp”的第一行,因此它只导入的相关部分。txt文件并自动找到正确的变量。由于并非每个受试者的校准长度都相等,因此不可能跳到固定的数字。

    我该怎么做?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Dom    6 年前

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

    首先导入目录中的所有文件:

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

    这里值得注意的是,您可以添加可选参数,如 col_names 在调用“read\u table2”后执行etc。

    导入所有文本文件后,即可对其进行筛选:

    filter(df, 'timeStampColumnName' == IviewTimestamp)
    
        2
  •  0
  •   Ben Bolker one    6 年前

    近似值:使用 grep() 要查找所需字符串的第一个位置,请使用 read_table2 skip 论点

    firstline <- grep("IviewTimestamp",readLines("file.txt"))[1]
    

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

    read_table2("file.txt", skip=firstline-1)
    

    这是低效的(因为您需要读取文件两次),但我猜每个文件的花费不到一秒钟。在Unix或类似Unix的操作系统上工作的一个更笨重但更高效的解决方案是 system() 运行外部(更高效) 格雷普 命令