2017-06-08 8 views
2

m個の対象遺伝子とn個のサンプルがあるとします。私は遺伝子の突然変異を1としてスコア付けし、非突然変異は0としてm×n行列を得ます。私は以下の行列プロットを再現できるようにデータを注文するアルゴリズムが必要です。私はこれをRでコーディングしていますので、コードは歓迎ですが必要ではありません。突然変異ウォーターフォールプロットを作るアルゴリズム(Rでコード化)

data.mutations <- data.mutations[order(rowSums(data.mutations), decreasing = TRUE), ] 

私も列をソートする方法を見つけ出すことはできません。

明らかに私はすべてのサンプル間で最も変異を持つ行がトップであるような行を注文することから始めます。最初の手順は簡単ですが、最初の行で列を並べ替えます。

data.mutations <- data.mutations[ , order(data.mutations[1, ], decreasing = TRUE)] 

今は頑張ってしまいます。素朴なアプローチには多くのループが必要です。より良いソリューションが必要です。

Mutation waterfall

+1

あなたはどのような順序になると思いますか?示されている単一のマトリックスプロットを再現する以外の組織のルールを明示的に述べておらず、単一の例ではルールを決定的に推論するには不十分です。私は推測している:行1のすべての突然変異列w /突然変異は、列1の突然変異w/oの前に現れる。行2、行3などの各ブロック内で繰り返します。 – jwimberley

+0

明示的ではないことを申し訳ありません。しかし、はい正しいです。 –

答えて

1

カラム場合A [1] [1]> B列Bの左側に表示されます。同点の場合は、A [2]とB [2]を比較するなど。換言すれば、比較演算子は、行番号の降順でそれらの値を比較することによって列に定義される。これは、値sum [r = 1〜n] C [n] * 2 ^(1-r)を割り当てることによって、単一のスカラー値でエンコードすることができます。 (R以外の言語では、ビットが列の値に対応する整数を作成することによってこれを行うことができます)。次に、このエンコードされたスカラーの値が小さくなるように列をソートする必要があります。 Rで

n <- 15 
m <- 20 
p <- 0.15 
mat <- matrix(0,n,m) 
for (i in 1:n) { 
    for (j in 1:n) { 
    mat[i,j] = rbinom(1,1,0.15) 
    } 
} 
print(mat) 

# Order by row 
mat <- mat[order(rowSums(mat),decreasing=TRUE),] 

# Order by column 
code <- function(column) { 
    n <- length(column) 
    pow <- 2^-(0:(n-1)) 
    return (column %*% pow) 
} 
mat <- mat[,order(apply(mat,2,code),decreasing=TRUE)] 

print(mat) 
関連する問題