Remove duplicates keeping entry with largest absolute value

前端 未结 7 2381
醉酒成梦
醉酒成梦 2020-11-28 10:12

Let\'s say I have four samples: id=1, 2, 3, and 4, with one or more measurements on each of those samples:

> a <- data.frame(id=c(1,1,2,2,3,4), value=c         


        
7条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-28 10:23

    Check out ?aggregate:

    aggregate(value~id,a,function(x) x[which.max(abs(x))])
    

    I like the answer by @DWin, but I would like show how this could also work with metadata:

    aa<-merge(aggregate(value~id,a,function(x) x[which.max(abs(x))]),a)
    # Fails if the max value is duplicated for a single id without next line.
    aa[!duplicated(aa),]
    

    I couldn't help myself and created one last answer:

    do.call(rbind,lapply(split(a,a$id),function(x) x[which.max(abs(x$value)),]))
    

提交回复
热议问题