【问题标题】:Calculate group mean with the same grouping factors several times多次计算具有相同分组因子的组均值
【发布时间】:2017-01-10 08:00:07
【问题描述】:

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

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

【问题讨论】:

    标签: r group-by dplyr


    【解决方案1】:

    使用dplyr,我们可以比较'Founder'的相邻元素,与'Chromosome'一起创建一个分组变量,然后得到'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.table,我们将“data.frame”转换为“data.table”(setDT(df1)),按“Founder”的“Chromome”和run-length-type id(rleid)分组,我们将(:=)“概率”的mean 分配为“平均”列。

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

    【讨论】:

    • 非常感谢!这是我在这里的第一个问题。最后我使用了 data.table 选项。 dplyr 给了我:Error: expecting a single value。 data.table 选项覆盖了我的创始人变量,这个很容易再次被替换。所以,问题解决了。 :)
    • @tboersma 我正在使用dplyr_0.5.0。它正在使用您的示例数据集
    • 我正在使用dplyr_0.4.3,也有plyr_1.8.4。它仍然给我Error: expecting single value。我的数据还有 4 列,但这无关紧要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2012-04-20
    • 1970-01-01
    • 2022-06-15
    • 2020-07-04
    相关资源
    最近更新 更多