2

次の例のような2つの行列があります

マット1

   row.names  geneid1  geneid2  geneid3  geneid4  geneid5
   sample1    0.99       8.76    8.78    7.65     5.4
   sample2    5.6        6.76    7.4     9.08     8.2
   sample4    7.5        6.4     6.4     6.1      8.6     

マット2

  row.names  geneid1  geneid2  geneid3  geneid4  geneid5
   sample1    0.98       8.76    8.78    4.65     5.4
   sample2    0.6        6.76    1.4     9.78     6.2
   sample4    9.5        9.4     3.4     5.1      8.0  

それらの間の相関関係を見つけた場合

      cormat<cor(mat1,mat2)

結果の行列はこのようになります

            geneid1  geneid2  geneid3  geneid4  geneid5
   geneid1    0.1       0.14    0.58    0.89    0.5
   geneid2    0.6       -0.2    0.4     0.45    0.6
   geneid3    0.5        0.7    0.3    -0.4     0.76
   geneid4    0.65       0.64   0.76   0.45     0.7
   geneid5    0.3        0.2    0.6     0.2     0.2

マトリックス内のしきい値 0.5 を超える値を選択し、残りの値を省略したいと思います。その値を超える行と列の遺伝子 ID 番号のみが必要です。使ってみた

         which(cormat>0.5)

しかし、元のマトリックスでそれらにインデックスを付け、0.5 の値を超える行と列のみを保持する方法がわかりません。さらに分析するために相関性の高い値を選択できるインデックス作成以外の方法はありますか。

4

1 に答える 1

3

引数を使用arr.ind:

which(cormat>0.5,arr.ind=TRUE)

set.seed(1)
m <- matrix(runif(9),3,3)
m
          [,1]      [,2]      [,3]
[1,] 0.2655087 0.9082078 0.9446753
[2,] 0.3721239 0.2016819 0.6607978
[3,] 0.5728534 0.8983897 0.6291140
which(m < 0.5)
[1] 1 2 5
which(m < 0.5, arr.ind=TRUE)
     row col
[1,]   1   1
[2,]   2   1
[3,]   2   2
m[which(m < 0.5, arr.ind=TRUE)]
[1] 0.2655087 0.3721239 0.2016819
于 2013-03-14T12:53:44.987 に答える