用相同的分组因子多次计算组均值

时间:2016-09-02 09:00:48

标签: r group-by dplyr

我有基因数据。它相当大,约有17 000个遗传标记(SNP)和700个个体。这些SNP可以分配给创始人。 现在我想计算每个“创始人细分”的平均概率。片段被定义为染色体的一部分,不间断地分配给一个创始人。

在下面的示例中,我将有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

当多次使用相同的分组因子时,如何计算组均值?

1 个答案:

答案 0 :(得分:4)

使用dplyr我们可以比较'Founder'的相邻元素来创建分组变量以及'Chromosome',然后得到'{1}}'Probability'

mean

或者使用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.frame'转换为'data.table'(data.table),按'Chromome'和游程长度类型ID({{1}分组}''创始人',我们将(setDT(df1)rleid的“概率”分配为“平均”列。

:=