我有一个以下格式的数据框,正如您所看到的,每个基因都有多个变量关联(例如,前两行都与基因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),]
答案 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)