我有一个如下数据集:
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])
比你多!
答案 0 :(得分:2)
两个想法:
如果它们的格式相同,则将blank.lines.skip
/ read.table
的{{1}}参数设置为FALSE而不是默认值TRUE。然后你得到一个data.frame,其中有空行,你可以拆分。
如果它们不是全部采用相同的格式,那么您可以使用这些命令的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