2

私は R でこの質問をし、多くの回答を得ましたが、それらはすべて、数時間実行した後に私の 4Gb RAM コンピューターをクラッシュさせるか、完了するまでに非常に長い時間がかかります。 データ フレーム内の行を比較するより高速な方法

R でやるべき仕事ではないという人もいました。私は C を知らず、Perl に少し流暢であるため、ここで質問します。

大規模なデータセットの各行を他の行と比較して、特定の程度の相同性を持つ行を識別する高速な方法があるかどうかを知りたいです。以下の簡単な例で、相同性 >= 3 が必要だとしましょう。

data:
sample_1,10,11,10,13
sample_2,10,11,10,14
sample_3,10,10,8,12
sample_4,10,11,10,13
sample_5,13,13,10,13

出力は次のようになります。

output
   sample    duplicate    matches
1 sample_1   sample_2     3
2 sample_1   sample_4     4
3 sample_2   sample_4     3
4

2 に答える 2

1

一致は、両方の行が同じ位置に同じ番号を持つ場合に計算されます。

perl -F',' -lane'
  $k = shift @F;
  for my $kk (@o) {
    $m = grep { $h{$kk}[$_] == $F[$_] } 0 .. $#F;
    $m >=3 or next;
    print ++$i, " $kk  $k  $m";
  }
  push @o, $k;
  $h{$k} = [ @F ];
' file

出力、

1 sample_1  sample_2  3
2 sample_1  sample_4  4
3 sample_2  sample_4  3
于 2013-11-02T09:43:16.380 に答える