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

Oll*_*i J 7 import r

我有一堆输出.txt文件,包含一个大参数列表和一个XY坐标集.我需要从所有文件中提取这些坐标,以便只将这些行导入到矢量中.这样可以正常使用

impcoord<-read.table("file.txt",skip= ,nrow= ,...)
Run Code Online (Sandbox Code Playgroud)

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

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

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

coordinatesXY
Run Code Online (Sandbox Code Playgroud)

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

-Olli

- 编辑 -

对困惑感到抱歉.

该文件的部分如下:

##XYDATA= (X++(Y..Y))
131071    -2065
131070    -4137
131069    -6408
131068    -8043 
...       ...
...       ...
Run Code Online (Sandbox Code Playgroud)

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

G. *_*eck 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+) *$")
Run Code Online (Sandbox Code Playgroud)

赠送:

> DF
      V1    V2
1 131071 -2065
2 131070 -4137
3 131069 -6408
4 131068 -8043
Run Code Online (Sandbox Code Playgroud)

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

read.table(text = Lines, 
    skip = grep("##XYDATA=", readLines(textConnection(Lines))))
Run Code Online (Sandbox Code Playgroud)

添加了一些修订并添加了第二种方法.


Jer*_*myS 6

这看起来像一个工作data.tablefread

library(data.table)
impcoord <- fread("file.txt",skip="coordinatesXY")
Run Code Online (Sandbox Code Playgroud)

- 编辑 -

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

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

## some random text
## some more random text
## More random text
table_heading1, table_heading2, table_heading3 ...etc
value1, value2, value3 ... etc
etc

Just_The_Table <- fread("the_above_as_a_text_file.txt", skip="table_heading1", header=T)
Run Code Online (Sandbox Code Playgroud)