R - 在特定行之后从.txt文件中读取行

时间:2014-09-05 07:28:06

标签: r import

我有一堆输出.txt文件,它们包含一个大参数列表和一个X-Y坐标集。我需要从所有文件中提取这些坐标,以便只将这些行导入到矢量中。这适用于

impcoord<-read.table("file.txt",skip= ,nrow= ,...)

但是文件在不同长度的支持参数之后打印坐标集。

幸运的是,坐标总是在包含某些单词的行之后开始。

因此我的问题是,如何在这些单词之后开始阅读.txt文件?让我们说它们是:

coordinatesXY

非常感谢您的时间和帮助!

-Olli

- 编辑 -

很抱歉这个混乱。

该文件的部分如下:

##XYDATA= (X++(Y..Y))
131071    -2065
131070    -4137
131069    -6408
131068    -8043 
...       ...
...       ...

第一行是skip应该结束的行,需要将以下坐标导入向量。如您所见,X坐标从131071开始并结束为0.

3 个答案:

答案 0 :(得分:7)

1)gsubfn中的read.pattern read.pattern可用于只读取与特定模式匹配的行。在此示例中,我们匹配行的开头,可选空格,1个或多个数字,1个或多个空格,可选的减号后跟1个或多个数字,可选空格,行尾。匹配正则表达式的括号部分的部分作为data.frame中的列返回。如果数据来自文件,则此自包含示例中的text = Lines可以替换为"myfile.txt"。修改模式以适应。

Lines <- "junk
junk
##XYDATA= (X++(Y..Y))
131071    -2065
131070    -4137
131069    -6408
131068    -8043"

library(gsubfn)
DF <- read.pattern(text = Lines, pattern = "^ *(\\d+) +(-?\\d+) *$")

,并提供:

> DF
      V1    V2
1 131071 -2065
2 131070 -4137
3 131069 -6408
4 131068 -8043

2)读取两次仅使用基本R的另一种可能性是简单地读取一次以确定skip=的值并且第二次使用该值进行实际读取。要从文件myfile.txt中读取,请将text = LinestextConnection(Lines)替换为"myfile.txt"

read.table(text = Lines, 
    skip = grep("##XYDATA=", readLines(textConnection(Lines))))

已添加部分修订并添加了第二种方法。

答案 1 :(得分:5)

这看起来像是data.table的{​​{1}}

的工作
fread

- 编辑 -

这就是为什么给出一个可重复的例子是好的。该错误意味着您的文件导致了问题。

skip命令将您提供给文件的文本与文件进行匹配,以确定要从哪个行开始,因此您需要从该行的开头为其提供一个唯一的字符串,您希望它从中开始读取。该功能适用​​于以下内容:

library(data.table)
impcoord <- fread("file.txt",skip="coordinatesXY")

答案 2 :(得分:1)

可能的方法如下:

     conn<-file("file.txt",open="rt")
     x<-TRUE
     while (x)
        {x<-!grepl("coordinatesXY",readLines(conn,n=1))}
     ret<-read.table(conn,...) #insert additional parameters to read.table
     close(conn)

您从输入文件中读取一行,并在找到指示符字符串时停止。然后,您通过read.table阅读该文件。使用这种方法,您不会将整个文件存储在内存中,而只是存储在您需要的文件中。

相关问题