R扫描两列并保持唯一

时间:2013-02-11 09:39:23

标签: r large-files

我有一个带有四列的制表符分隔数据文件,其中我想读取R中的前两列,并且只保留唯一的2列对作为data.frame。该文件可以是数百万行:

cluster-1    3    12412341324    13412341234
cluster-1    3    62626662346    54234524354
cluster-1    3    45454345354    45454544545
cluster-2    644  12332234341    37535473475
cluster-2    644  54654365466    56565634543
cluster-2    644  56356356536    35634563456
...
cluster-9999999    123    123412341241    143132423
...

我想使用scan(或任何更好的选项)来阅读文件,最后得到data.frame

cluster-1    3
cluster-2    644
cluster-3    343
...
cluster-9999999    123

在R中读取这些大文件的最省时的方法是什么?

1 个答案:

答案 0 :(得分:5)

已知且相对较少的列:如果您知道列数,比如5列,并且您想要前两列(或者只有几列),那么可以使用来自colClasses的{​​{1}}:

read.table

在这里,我们将第3到第5列设置为# header here is set to false because I don't see one in your file df <- read.table("~/file.txt", header = FALSE, colClasses=c("character", "numeric", "NULL", "NULL", "NULL")) ,以便跳过它们。

未知列/众多列:如果您不知道列或有太多列,则另一种方法是将NULL用于pipe(或{{ 1}} awk就此问题而言)首先使用您需要的列过滤文件,然后使用pipe加载它:

cut

删除重复的行:使用read.table中的# header here is set to false because I don't see one in your file df <- read.table(pipe("awk '{print $1\"\t\"$2}' ~/file.txt"), header = FALSE, sep = "\t") 作为:

duplicated