使用R中的ddply标记最大值

时间:2013-12-11 02:25:48

标签: r

我有一个如下所示的数据集:

 
Gene           Sample        Mutation Count

    BRAF           ER5              WT     1
    BRAF           ES1              WT     1
    BRAF           ES2         p.V600E     4
    BRAF           ES2              WT     1
    BRAF           FRO         p.V600E     3
    BRAF           FRO              WT     1
    TP53           HMVII       p.G469V     1
    TP53           HMVII            WT     4
    TP53           hn15             WT     1
    TP53           HN5              WT     2
    TP53           HNS              WT     1

我们感兴趣的是首先标记来自Gene和Sample(不是变异)的重复项,指出哪些是重复的,并指出哪个重复条目是最大值,哪个不是最大值(可以有多于2个重复)基于计数字段(如果它们相等,我们可以称之为'max')。

(单独列)中的第二条信息是捕获每个突变的数据的统计数据,这对于冗余条目是相同的。相应的输出数据如下所示:


    Gene           Sample       Mutation Count      Flag            Tally
    BRAF           ER5              WT     1        ok              WT
    BRAF           ES1              WT     1        ok              WT
    BRAF           ES2         p.V600E     4        dup, max        p.V600E(4),WT(1)
    BRAF           ES2              WT     1        dup, not-max    p.V600E(4),WT(1)
    BRAF           FRO         p.V600E     3        dup, max        p.V600E(3),WT(1)
    BRAF           FRO              WT     1        dup, not-max    p.V600E(3),WT(1)
    TP53           HMVII       p.G469V     1        dup, not-max    p.G469V(1),WT(4)
    TP53           HMVII            WT     4        dup, max        p.G469V(1),WT(4)
    TP53           hn15             WT     1        ok              WT
    TP53           HN5              WT     2        dup, max        WT(2),WT(1)
    TP53           HNS              WT     1        dup, not-max    WT(2),WT(1)

任何想法如何最好地解决这个问题?我认为ddply会是最好的,但不确定。

1 个答案:

答案 0 :(得分:1)

我认为plyrbase::merge()的组合。我的结果表看起来与你的不同,但我认为这是正确的,因为最后两个Sample条目是不同的HN5和HNS?

g<-read.csv("g.csv")
require(plyr)

g.summarized<-ddply(g,
                    .(Gene,Sample),
                    summarise,
                    c=length(Mutation),
                    max=max(Count),
                    tally=paste0(paste0(Mutation,"(",Count,")"),collapse=","))
g.new<-merge(g,
             g.summarized,
             by=c("Gene","Sample"),all=TRUE)


getFlag<-function(Count,c,max){
  max<-ifelse(Count==max,"max","not-max")
  ok<-ifelse(c==1,"ok",paste0("dup, ",max))
  return(ok)
}

ddply(g.new,
      .(Gene,Sample,Mutation),
      summarise,
      Count=Count,
      Flag=getFlag(Count,c,max),
      Tally=tally)

   Gene Sample Mutation Count         Flag            Tally
1  BRAF    ER5       WT     1           ok            WT(1)
2  BRAF    ES1       WT     1           ok            WT(1)
3  BRAF    ES2  p.V600E     4     dup, max p.V600E(4),WT(1)
4  BRAF    ES2       WT     1 dup, not-max p.V600E(4),WT(1)
5  BRAF    FRO  p.V600E     3     dup, max p.V600E(3),WT(1)
6  BRAF    FRO       WT     1 dup, not-max p.V600E(3),WT(1)
7  TP53  HMVII  p.G469V     1 dup, not-max p.G469V(1),WT(4)
8  TP53  HMVII       WT     4     dup, max p.G469V(1),WT(4)
9  TP53   hn15       WT     1           ok            WT(1)
10 TP53    HN5       WT     2           ok            WT(2)
11 TP53    HNS       WT     1           ok            WT(1)