1

私が持っているのは、このようないくつかの大きなファイルです。

IID     geneA           geneA1          geneA2          geneA3          geneA4
snp24   0.9999998116    0.9999998116    0.9999998116    0.9999998116    0.9999998116
snp25   0.9999998116    0.9999998116    0.9999998116    0.9999998116    0.9999998116
snp26   0.9999998116    0.9999998116    0.9999998116    0.9999998116    0.9999998116
snp27   0.9999998116    0.9999998116    0.9999998116    0.9999998116    0.9999998116
snp28   0.9999998116    0.9999998116    0.9999998116    0.9999998116    0.9999998116
snp29   0.9999998116    0.9999998116    2.0107465936227367e-11  0.0009575306    0.9999998116
snp30   0.9999998116    0.9999998116    4.033923217176159e-11   0.04319423  0.9999998116
snp31   0.9999998116    0.9999998116    7.983277836657833e-11   0.0933816338    0.9999998116
snp32   0.9999998116    0.9999998116    0.0018850954    0.4196570142    0.9999998116
snp33   0.9999998116    0.9999998116    0.6007038997    0.9999998116    0.9999998116
snp34   0.9999998116    0.9999998116    0.9999998116    0.9999998116    0.9999998116

非常に重要なものを除外する必要があります。最初はこれは簡単だと教えましgrep "e-"たが、その後、行全体を取得します。

これらのファイルから取得したいのは、次のようなものです (すべて非常に重要なヒット):

snp29  geneA2   2.0107465936227367e-11
snp30  geneA2   2.0107465936227367e-11

誰でもこれで私を助けることができますか?

4

2 に答える 2

3

次のアプローチは仕事をしdatます( はデータフレームの名前です):

sig <- 1e-8  # the threshold

idx <- which(dat[-1] < sig, arr.ind = TRUE)

res <- data.frame(ID = dat[idx[, "row"], 1],
                  gene = names(dat)[-1][idx[, "col"]],
                  sig = dat[-1][idx])

結果:

     ID   gene          sig
1 snp29 geneA2 2.010747e-11
2 snp30 geneA2 4.033923e-11
3 snp31 geneA2 7.983278e-11
于 2013-09-30T12:50:29.183 に答える
1

R を使用する場合は、ここに簡単な解決策があります。まず、次のように grep を使用してデータセットをフィルタリングできます。

grep e datafile > filtered.out

これにより、重要なデータを含む行が選択されるため、ヘッダー (「e」を含む) だけでなく、すべてを R に読み込む必要はありません。次に、Rでこれを実行できます:

data <- read.table("filtered.out",T,row.names=1)
sig <- data< 1e-8
sigvalues <- data.frame(IID=rownames(data)[row(data)[sig]],gene=colnames(data)[col(data[sig]],value=data[sig])

出力は次のとおりです。

    IID   gene        value
1 snp29 geneA2 2.010747e-11
2 snp30 geneA2 4.033923e-11
3 snp31 geneA2 7.983278e-11

これを行うためのすべての UNIX の方法もおそらくありますが、私は Unix の専門家ではありません。しかし、fedorqui は awk を使用してそれを理解していることがわかります。

于 2013-09-30T12:49:09.497 に答える