2017-01-02 8 views
-3

私は大きなdata.frameゲノムデータを持っています。 colnames(df)=c("id","chr","start","end","log2") ここで、idはサンプル名、chrは染色体の番号、開始点と終了点は染色体上の位置を示し、log2はその位置での読み取りの高さ/低さを示します。tapplyでtapplyを使用

多くのデータがあり、何が起こっているのか分かりにくいので、各サンプル(id)を調べようとしています。各染色体(chr)について、log2の中央値を計算したいセグメント、1から10^7,1 + 10^7から2^10^7までのすべての読み取りを言いましょう。

結果は新しいdata.frameでなければなりません。各サンプルと各染色体には、いくつかの行があり、開始と終了はどのセグメントにあるのかを示し、最後の値はそのセグメントの中央値になります。

私はtapply()を使用してサンプルを調べ、それにはtapply()を入れ、染色体を越えて、次に各染色体でループを「開始」位置に移動する必要があると思いますか? (開始座標が範囲内にある場合にのみ気にしておきます) これにどう対処するか正確にはわかりません。

ヒント、ヒント、指示は非常に高く評価されます。

再現性の例 -

# fabricated data, 4 samples 
# 24 chromosomes in each sample 
# 61 ranges in each chromosome 

df <- data.frame(id = rep(c('F1','F2','M1','M2'), each = 24*61), 
       chr = rep(rep(c(1:22,'x','y'), each = 61),4), 
       start = rep(seq(1,25*10^6 - 99, length.out = 61),times = 24*4), 
       end = rep(seq(100,25*10^6, length.out = 61),times = 24*4), 
       log2 = rnorm(4*24*61)) 

# output should look something like this- 
id  chr  start end  median_log_2 
"F1" "1"  1  8000000 0.002 
"F1" "1"  8000001 16000000 0.00089 
"F1" "1"  16000001 24000000 -0.0011 
"F1" "1"  24000000 25000000 0.108 
"F1" "2"  1  8000000 -0.0012 
"F1" "2"  8000001 16000000 0.0089 
"F1" "2"  16000001 24000000 0.00311 
"F1" "2"  24000000 25000000 0.0128 
... 
... 
+0

単語で説明する代わりに、[再現可能な例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)と予想される出力を投稿するだけです。 – Sotos

+0

再現可能な例を追加します(尋ねるのが好きなようなものですが)、これで何かがより明確になるとは思えません。 –

+0

「私が聞きたいのはどういう意味ですか?」それは個人的な選択だと思いますか?あなたを「いじめ」しようとしていますか?私はあなたを助けようとしています(うまくいました)、再現可能な例と予想される出力は、私と他の人があなたを助けやすくします。あなたはここで16の質問をしました。私はあなたにこれらのようなことを伝える必要はありませんし、そのようなコメントをしてはいけません。 – Sotos

答えて

0
median_data <- tapply(df$log2, 
         list(df$id, 
          df$chr, 
          cut(df$start, c(0,8*10^6,1.6*10^7,2.4*10^7,3.2*10^7,4*10^8))), 
         median) 
median_data <- as.data.frame.table(median_data) 

仕事をしてくれました。

tapply()では、list()を使用して複数の引数でサブセットを設定できます(出力は正しい形式ではありませんが、私にとっては近い)。

関連する問題