我有一个如下格式的数据框架,正如您所看到的,每个基因都有多个相关变量(例如,前两行都与基因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),]
发布于 2013-11-20 04:30:58
正如Ronald在评论中所说的那样,你应该更明确地告诉我们你在努力哪一部分。此外,最好提供一个虚拟的示例数据集和该集的预期结果。这样才有可能更好地了解其意图。
选择标准是最大化偏离平均值的总和吗?如果是这样的话,下一段代码将执行您想要的操作。它并没有针对速度进行优化,而是为了易于遵循。
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)
https://stackoverflow.com/questions/20071673
复制相似问题