2

R で最初の 2 つを読み取り、一意の 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 でこの大きなファイルを読み取る最も時間効率の良い方法は何でしょうか?

4

1 に答える 1

6

既知の比較的少数の列: 列数がわかっている場合、たとえば 5 列で、最初の 2 列が必要な場合 (または列が少ない場合)、colClassesfromを使用してこれを行うことができread.tableます。

# 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"))

ここでは、3 列目から 5 列目をNULLスキップするように設定します。

不明な列/多数の列: 列がわからない場合や列が多すぎる場合の別の方法は、pipewith awk(またはpipewithcutそのことについては with) を使用して、最初に必要な列でファイルをフィルター処理し、次に を使用してロードすることです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")

重複した行を削除します: 次のように使用duplicatedbaseます:

df <- df[!duplicated(df), ]
于 2013-02-11T09:56:26.113 に答える