R“每个文件有多个数据集”

时间:2012-04-23 12:33:19

标签: r dataset

我有一个如下数据集:

0 0 0
0 0 0


54077 184965 81.25
54266 184776 81.25


65130 199986 82.1705426356589
65513 199600 82.1705426356589

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

比你多!

3 个答案:

答案 0 :(得分:2)

两个想法:

  1. 如果它们的格式相同,则将blank.lines.skip / read.table的{​​{1}}参数设置为FALSE而不是默认值TRUE。然后你得到一个data.frame,其中有空行,你可以拆分。

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

答案 1 :(得分:2)

最糟糕的情况是,您必须使用n = 1的readLines一次读取一行,与strsplit分割,并在列表中收集每个数据集,在开始新元素之前查找分隔符(空行)你的清单。

但是如果gsk3的解决方案因为您的数据集更加非结构化而失败,那么您只需要这样做......

答案 2 :(得分: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