使用相同的分组因素多次计算组平均值

5

我有遗传数据。它相当庞大,约有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

如果有相同的分组因素,我该如何计算群组均值I?

1个回答

4
使用 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) 进行分组,我们使用 (:=) "Probability" 的 mean 作为 "Average" 列。

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

1
非常感谢!这是我在这里的第一个问题。最终我使用了data.table选项。dplyr给了我:Error: expecting a single value。data.table选项覆盖了我的创始人变量,但这个很容易再次替换。所以,问题解决了。 :) - user6735210
@tboersma 我正在使用 dplyr_0.5.0。它可以与你的示例数据集一起使用。 - akrun
我正在使用 dplyr_0.4.3,同时也有 plyr_1.8.4。但仍然出现了 Error: expecting single value 的错误。 我的数据还有4列,但这不应该有影响。 - user6735210

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接