【发布时间】:2016-02-17 18:03:34
【问题描述】:
我有一个“example.txt”文件,如下:
SIGNAL: 40 41 42
0.406 0.043 0.051 0.021 0.013
0.056 0.201 0.026 0.009 0.000
0.000 0.128 0 0.009 0.000
TOTAL: 0.657
SIGNAL: 44 45 46 48
0.128 0.338 0.026
0.333 0.03 0.000
0.060 0.013 0.004
0.009 0.017 0.009
0.013 0 0.000
TOTAL: 0.704
SIGNAL: 51 52 54
0.368 0.081 0.085 0.004
0.162 0.09 0.064 0.073
0.013 0.017 0.009 0.000
TOTAL: 0.266
SIGNAL: 60 61 62 63 64 65 66 67
0.530 0.030
0.009 0.179
0.154 0.004
0.068 0.009
TOTAL: 0.796
我想将 "SIGNAL: 44 45 46 48" 和 "TOTAL: 0.704" 之间的行导入 R,我使用 read.table("example.txt",skip=6 ,nrow=5) 提取这些特定行,它可以工作。
V1 V2 V3
1 0.128 0.338 0.026
2 0.333 0.030 0.000
3 0.060 0.013 0.004
4 0.009 0.017 0.009
5 0.013 0.000 0.000
但是,我的真实数据(有 450,000 行)非常大,如果我想提取“SIGNAL: 3000 3001 3002 3003”和下一个“TOTAL”之间的行,我该怎么办?非常感谢!
【问题讨论】:
-
在显示的示例中,列数在某些情况下是不同的。对于行之间的每组 SIGNAL/TOTAL,您希望作为单个数据集还是不同的数据集?
-
read.table(text = grep("^(SIGNAL|TOTAL)", readLines(file), invert = TRUE, value = TRUE), fill = TRUE)是你想要的吗? -
如果我们需要单独的数据集,我们读取带有
readLines.i.e 的.txt 文件。lines <- readLines('yourfile.txt'); Map(function(i,j) read.table(text=lines[(i+1):(j-1)], sep='', header=FALSE), grep('SIGNAL', lines), grep('TOTAL', lines)) -
@akrun 谢谢! “readline”太棒了,你帮我输出了所有的集合,但是我的大数据怎么只能得到两个集合。例如,我只想提取“SIGNAL:3000 3001 3002 3003”和下一个“TOTAL”之间的行以及“SIGNAL:154 155 157”和下一个“TOTAL”之间的行,我该如何输出这两个结果列表形式?
-
@RichardScriven 谢谢!您帮助我以统一的方式输出所有数据,但实际上我只想提取“SIGNAL:3000 3001 3002 3003”和下一个“TOTAL”之间的行以及“SIGNAL:154 155 157”和下一个“之间的行”全部的”。我该怎么办呢,谢谢!