当观察矩阵中的变量存在多个观测值时,在R中选择每个变量的变量观测值最多

时间:2013-11-19 12:31:11

标签: r filtering

我有一个以下格式的数据框,正如您所看到的,每个基因都有多个变量关联(例如,前两行都与基因X1相关)。

如何选择X1的变量最大的探针,X2的变量探针最多,X3的探针变化最大?我将使用每行的中位数绝对偏差计算可变性,以给出可变性的度量。数据框的尺寸非常大(439385 x 32)

             P12_neg    P29_neg    P14_neg     P3_neg   Gene    MAD
cg00008945 0.06834382 0.02129751 0.05877461 0.07455803    X1    n1
cg00011200 0.03415952 0.02044276 0.01593071 0.02513872    X1    n2
cg00018261 0.10386690 0.01565995 0.03092006 0.02627907    X2    n3
cg00026186 0.02339364 0.01111460 0.01287943 0.01242176    X2    n4
cg00026375 0.06322588 0.05420078 0.04394374 0.08865914    X3    n5
cg00043371 0.03288300 0.01759402 0.01939199 0.01499336    X3    n6

编辑。

我使用函数

计算了中位绝对偏差,是的
 dataframe$MAD<-apply(dataframe,1,mads) 

找到了我的问题的解决方案。

为了澄清我究竟指的是什么,如果第2行的MAD是最高的 对应于基因X1的所有行,如果第5行的MAD是所有行中的最高行 与基因X3相关,第4行的MAD是与基因X2相关的最高,我希望能够得出第2行(基因X1),第4行(基因X2)和第5行(基因X3)

我下定的解决方案是按[1]顺序降序MADS和[2]生成基因名称载体,[3]使用匹配命令

dataframe<-dataframe[rev(order(dataframe$MAD)),]
genes.vec<-as.character(dataframe$Gene[!duplicated(dataframe$Gene)])
dataframe2<-dataframe[match(genes.vec,dataframe$Gene),]

1 个答案:

答案 0 :(得分:0)

正如罗纳德在评论中所说,你应该更具体地告诉我们你正在努力的部分。此外,最好提供虚拟示例数据集和该集合的预期结果。这样就可以更好地了解目标。

选择标准是否最大化与均值的偏差的和?如果是这样的话,下一个代码会做你想要的。它没有针对速度进行优化,旨在易于理解。

 sampleFrame=data.frame(P1=c(3,4,2,1,5,6),P2=c(2,4,6,10,2,7),
    Gene=c('X1','X1','X2','X2','X2','X3'))

 dataCols = grep('^P',colnames(sampleFrame))
 namesCols = colnames(sampleFrame)[dataCols] 
 maximunsPerX = by(sampleFrame[,dataCols],sampleFrame[,'Gene'],function(x){   
   medians = apply(as.matrix(x),1,median)  
   names(medians) = NULL   
   mediansDesviation = abs(as.matrix(x) - medians)   
   sumOfMedianDesviation = colSums(mediansDesviation)    
   theMaximun = which.max(medians)   
   return(x[theMaximun,]) 
 })

 maxSample = do.call('rbind',maximunsPerX)