我有基因数据。它相当大,约有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
当多次使用相同的分组因子时,如何计算组均值?
答案 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
的“概率”分配为“平均”列。
:=