2016-09-02 19 views
5

私には遺伝的データがあります。それは非常に大きく、約17,000の遺伝マーカー(SNP)と700人の個体。これらのSNPは創始者に割り当てることができます。 今度は、「創業者セグメント」あたりの平均確率を計算したいと思います。セグメントは、中断されていない1つのファウンダーに割り当てられている染色体の一部として定義されます。同じグループ化係数でグループ平均を数回計算する

以下の例では、3つのセグメントがあります。
最後に、セグメント内のすべてのSNPに対する平均確率を知りたいと思います。

Chromosome SNP Founder Probability 
1  1  7  0.6 
1  2  7  0.5 
1  3  7  0.7 
1  4  2  0.5 
1  5  2  0.8 
1  6  7  0.6 
1  7  7  0.5 

私はdplyrで簡単にグループ化することができますが、私は私が何をしたいので、創業者7.

と一緒に他のセグメントとの創設者7の最初のセグメントを望んでいない:

Chromosome SNP Founder Probability Average 
1  1  7  0.6  0.6 
1  2  7  0.5  0.6 
1  3  7  0.7  0.6 
1  4  2  0.5  0.65 
1  5  2  0.8  0.65 
1  6  7  0.6  0.55 
1  7  7  0.5  0.55 

同じグループ化係数を何回か持っていると、グループ平均値Iをどのように計算できますか?

答えて

4

dplyrで、私たちは「染色体」と一緒にグループ化変数を作成するために、「創立者の隣接する要素を比較して、「確率」

library(dplyr) 
library(data.table) 
df1 %>% 
    group_by(Chromosome, grp1 = cumsum(Founder!=lag(Founder, default = Founder[n()]))) %>% 
    mutate(Average = mean(Probability)) 
# Chromosome SNP Founder Probability grp1 Average 
#  <int> <int> <int>  <dbl> <int> <dbl> 
#1   1  1  7   0.6  0 0.60 
#2   1  2  7   0.5  0 0.60 
#3   1  3  7   0.7  0 0.60 
#4   1  4  2   0.5  1 0.65 
#5   1  5  2   0.8  1 0.65 
#6   1  6  7   0.6  2 0.55 
#7   1  7  7   0.5  2 0.55 

またはdata.tableを使用してのmeanを得ることができ、 'data.frame'から 'data.table'(setDT(df1))を 'Chromome'でグループ化し、 'Founder'のランレングスタイプid(rleid)に変換すると、meanには ''が割り当てられます。 「平均」列。

library(data.table) 
setDT(df1)[, Average := mean(Probability) , .(Chromosome, grp1 = rleid(Founder))] 
+1

ありがとうございました! これが私の最初の質問でした。最後に、私はdata.tableオプションを使用しました。 'dplyr'が私に「エラー:単一の値を期待しています」と言った。 data.tableオプションは私の創始者の変数を上書きしましたが、これは簡単に再び置き換えられました。だから、問題は解決しました。 :) – tboersma

+0

@tboersma私は 'dplyr_0.5.0'を使用しています。 – akrun

+0

私は 'dplyr_0.4.3'と' plyr_1.8.4'を使用しています。それでも私は 'Error:single value'を期待しています。 私のデータは4列ありますが、これは問題ではありません。 – tboersma

関連する問題