2016-09-02 13 views
5

Mam dane genetyczne. Jest dość duży, około 17 000 markerów genetycznych (SNP) i 700 osobników. Te SNP można przypisać do założyciela. Teraz chcę obliczyć średnie prawdopodobieństwo na "segment założyciela". Segment jest definiowany jako część chromosomu przypisana jednemu założycielowi nieprzerwanie.Obliczyć średnią grupy z tymi samymi współczynnikami grupowania kilka razy

W poniższym przykładzie miałbym 3 segmenty.
Na koniec chcę poznać średnie prawdopodobieństwo dla wszystkich SNP w segmencie.

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 

mogę grupa łatwo dplyr, ale nie chcę pierwszy segment założyciela 7 wraz z drugim segmencie założyciela 7.

Więc czego chcę:

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 

Jak mogę obliczyć średnią grupy I, gdy mają te same czynniki grupujące kilka razy?

Odpowiedz

4

Z dplyr możemy porównać sąsiednie elementy „Fundator”, aby utworzyć zmienną grupowania wraz z „chromosomu”, a następnie uzyskać mean z „prawdopodobieństwo”

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 

lub używając data.table, przekształcamy "data.frame" w "data.table" (setDT(df1)), pogrupowane według "Chromome" i id typu "run-length-type" (rleid) "Founder", przypisujemy (:=) mean z "Probability" jako kolumna "Średnia".

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

Dziękuję bardzo! To było moje pierwsze pytanie tutaj. W końcu skorzystałem z opcji data.table. 'dplyr' dał mi:' Błąd: spodziewa się jednej wartości'. Opcja data.table nadpisała moją zmienną założycielską, tę można było łatwo wymienić ponownie. Tak, problem został rozwiązany. :) – tboersma

+0

@tboersma Używam 'dplyr_0.5.0'. Pracuje z przykładowym zestawem danych – akrun

+0

Używam 'dplyr_0.4.3' oraz również' plyr_1.8.4'. Nadal daje mi "Błąd: oczekiwanie pojedynczej wartości". Moje dane mają 4 dodatkowe kolumny, ale nie powinno to mieć znaczenia. – tboersma

Powiązane problemy