小编Ric*_*rdB的帖子

如何使用data.table跨多个列(loci)按组有效地计算等位基因频率(比例)

我有一个data.table的等位基因身份(行是个体,列是基因座),由一个单独的列分组.我想按组计算每个基因座的等位基因频率(比例).示例数据表:

    DT = data.table(Loc1=rep(c("G","T"),each=5), 
      Loc2=c("C","A"), Loc3=c("C","G","G","G",
      "C","G","G","G","G","G"), 
    Group=c(rep("G1",3),rep("G2",4),rep("G3",3)))
    for(i in 1:3)
        set(DT, sample(10,2), i, NA)
    > DT
        Loc1 Loc2 Loc3 Group
     1:    G   NA    C    G1
     2:    G    A    G    G1
     3:    G    C    G    G1
     4:   NA   NA   NA    G2
     5:    G    C   NA    G2
     6:    T    A    G    G2
     7:    T    C    G    G2
     8:    T    A    G    G3
     9:    T    C    G    G3
    10:   NA    A    G    G3
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我尝试按组进行计算时,只有组中存在的等位基因ID被识别,所以我很难找到可以告诉我例如所有3组中基因座1的G的比例的代码.举个简单的例子,计算每个基因座上第一个等位基因的总和(不是比例):

    > fun1<- function(x){sum(na.omit(x==unique(na.omit(x))[1]))}
    > DT[,lapply(.SD,fun1),by=Group,.SDcols=1:3]
       Group Loc1 Loc2 …
Run Code Online (Sandbox Code Playgroud)

r data.table

3
推荐指数
1
解决办法
999
查看次数

标签 统计

data.table ×1

r ×1