Perl スクリプトの 1 つを R スクリプトに変換しようとしています。Rに次のようなデータフレームがあります(列名は無視してください)-
CHR 開始終了タイプ chr1 945493 945593 通常 chr1 945593 947374 通常 chr1 947374 947474 ノーマル chr1 947474 947574 ゲイン chr1 947574 947674 ゲイン chr1 947674 960364 ゲイン chr1 960364 960464 通常 chr22 17290491 17290591 ノーマル chr22 17290591 17290691 ノーマル chr22 17290691 17290791 ゲイン chr22 17290791 17292513 ゲイン chr22 17292513 17292613 ゲイン chr22 17292613 17292713 ゲイン chr22 17292713 17293046 ゲイン chr22 17293346 17298475 ゲイン chr22 17298475 17298575 ゲイン chr22 17298575 17298675 ノーマル chr22 17298675 17303632 通常 chr22 17303632 17303732 損失 chr22 17303732 17303832 ノーマル chrX 154162621 154181221 通常 chrX 154181221 154181321 通常 chrX 154181321 154181421 損失 chrX 154181421 154181521 損失 chrX 154181521 154181621 損失 chrX 154181621 154181721 損失 chrX 154181721 154216867 損失 chrX 154216867 154216967 通常 chrX 154216967 154217067 通常 chrX 154217067 154217167 通常
「CHR」列と「TYPE」列に同じ値を持つ連続する行が少なくとも 5 行ある場合は、それらすべての行を 1 つの行に結合して、START 列が最初の行の値を持ち、END 列が最後の行の値を持つようにします。 「利益」または「損失」タイプの行を返すだけです。したがって、望ましい出力は次のとおりです。
chr22 17290691 17298575 ゲイン chrX 154181321 154216867 損失
私が今していることは次のとおりです。
- 「write.table」でデータフレームを保存します。
次の perl スクリプトを使用します。
open $first, "<",$ARGV[0] or die "Unable to open input file: $!"; my $count=1; $_ = <$first>; chomp; my ($p_key, $p_col1, $p_col2,$p_cnv) = split; while(<$first>) { chomp; my ($key, $col1, $col2,$cnv) = split; if ($key eq $p_key and $cnv eq $p_cnv) { $p_col2 = $col2; $count++; } elsif ($count > 4){ print $p_key,"\t", $p_col1,"\t", $p_col2,"\t", $p_cnv,"\n" if($p_cnv eq "gain" or $p_cnv eq "loss"); ($p_key, $p_col1, $p_col2, $p_cnv) = ($key, $col1, $col2, $cnv); $count=1; } else { ($p_key, $p_col1, $p_col2, $p_cnv) = ($key, $col1, $col2, $cnv); $count=1; } }
これは、最初にデータフレームを保存してから Perl スクリプトを使用するための追加の手順だと思います。誰かがRでこれを行う簡単な方法を提案してもらえますか?パッケージやその他のトリックはありますか?