1

我有一个如下数据集:

0 0 0
0 0 0


54077 184965 81.25
54266 184776 81.25


65130 199986 82.1705426356589
65513 199600 82.1705426356589

这些数据由 2 个空白行分隔。因此,当我使用 gnuplot 绘制点图时,他们会认为这些是一个文件中的单独数据。如何在 R 中做同样的事情?因为对于每个这样的数据集,我将有两个点通过线连接。(例如,[5077,184965] 连接到 [54266, 199600])

比你好多了!

4

3 回答 3

2

两个想法:

  1. 如果它们都采用相同的格式,则将/的blank.lines.skip参数设置为 FALSE 而不是其默认的 TRUE。然后你会得到一个 data.frame,里面有你可以分割的空行。read.tableread.csv

  2. 如果它们的格式不同,那么您可以使用skip这些相同命令的参数来仅提取输入文件的某些行。

于 2012-04-23T12:37:45.310 回答
2

最坏的情况,您必须使用 n=1 的 readLines 一次读取一行,使用 strsplit 拆分,并收集列表中的每个数据集,在开始列表的新元素之前查找分隔符(空白行) .

但是你只需要在 gsk3 的解决方案失败的情况下这样做,因为你的数据集有点非结构化......

于 2012-04-23T12:40:59.503 回答
1

也可以将文件读入内存,

> buffer <- readLines ("tmp/file")
> buffer
 [1] "0 0 0"                         "0 0 0"                        
 [3] ""                              ""                             
 [5] "54077 184965 81.25"            "54266 184776 81.25"           
 [7] ""                              ""                             
 [9] "65130 199986 82.1705426356589" "65513 199600 82.1705426356589"

删除或处理(例如导出测量编号、数据集名称……)所有不属于数据表文件部分的行:

> buffer <- buffer [nzchar (buffer) > 0L]
> buffer
[1] "0 0 0"                         "0 0 0"                        
[3] "54077 184965 81.25"            "54266 184776 81.25"           
[5] "65130 199986 82.1705426356589" "65513 199600 82.1705426356589"

最后read.table在修改后的缓冲区上使用:

> read.table (textConnection (buffer))
     V1     V2       V3
1     0      0  0.00000
2     0      0  0.00000
3 54077 184965 81.25000
4 54266 184776 81.25000
5 65130 199986 82.17054
6 65513 199600 82.17054
于 2012-04-23T16:09:50.850 回答