gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:36:53 27 4
gpt4 key购买 nike

我有基因数据。它相当大,大约有 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

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

最佳答案

dplyr我们可以比较'Founder'的相邻元素与'Chromosome'一起创建一个分组变量,然后得到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.table ,我们将 'data.frame' 转换为 'data.table' ( setDT(df1) ),按 'Chromome' 和 'Founder' 的运行长度类型 id ( rleid ) 分组,我们分配 ( := ) mean “概率”作为“平均值”列。
library(data.table)
setDT(df1)[, Average := mean(Probability) , .(Chromosome, grp1 = rleid(Founder))]

关于r - 使用相同的分组因子多次计算组均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39288392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com