5つ以上の列に3より小さい値を持つ行を削除する

5つ以上の列に3より小さい値を持つ行を削除する

マージされたfeatureCountsのRNAseqデータセットがあります。 3つの条件と3つの反復があります。 5つ以上の列から遺伝子発現値が3未満の行を削除したいと思います。

以下は私のデータセットの例です。

Gene_id. M1 M2 M3 W1 W2 W3 S1 S2 S3
ENSMUSG00000102693 18 4 5 8 0 2 1 0 0
ENSMUSG00000064842 1 0 0 0 0 0 1 1 2
ENSMUSG00000051951 25 23 32 54 78 77 48 56 33
ENSMUSG00000102851 0 0 0 0 0 0 0 0 0
ENSMUSG00000103377 0 10 0 2 5 0 6 7 8

他の分析ツールから追加のDE分析のためにこのデータセットをインポートしたいと思います。

答え1

私があなたの質問を理解する限り、あなたは

awk '{
        count=0
        for (i=2; i<=NF; i++) if ($i < 3) count++
        if (count < 5) print
     }'

各行に対してカウンタを0に設定します。次に、最初の(遺伝子ID)を除く各フィールド(列)を見て、3より小さい場合は数を数えます。その後、数が5未満の場合は、その行を印刷します。 5つ以上の列に3より小さい値がある場合は、その行をスキップします(つまり削除)。

1行に折りたたむ必要がある場合は、;ステートメントの後にセミコロン()を追加する必要があります(上記のバージョンでは改行文字があった場所です)。

awk '{ count=0; for (i=2; i<=NF; i++) if ($i < 3) count++; if (count < 5) print; }'

関連情報