当观测矩阵中的一个变量存在多个观测值时,在R中为每个变量选取变量最多的观测值
我有一个如下格式的数据框,正如您所看到的,每个基因都有多个相关变量(例如,前两行都与基因X1相关) 如何为X1选择变量最大的探针,为X2选择变量最大的探针,为X3选择变量最大的探针?我将使用每行的中位数绝对偏差来计算可变性,从而为我提供可变性的度量。数据帧的尺寸相当大(439385 x 32) 编辑 我用这个函数计算了中位数绝对偏差,是的当观测矩阵中的一个变量存在多个观测值时,在R中为每个变量选取变量最多的观测值,r,filtering,R,Filtering,我有一个如下格式的数据框,正如您所看到的,每个基因都有多个相关变量(例如,前两行都与基因X1相关) 如何为X1选择变量最大的探针,为X2选择变量最大的探针,为X3选择变量最大的探针?我将使用每行的中位数绝对偏差来计算可变性,从而为我提供可变性的度量。数据帧的尺寸相当大(439385 x 32) 编辑 我用这个函数计算了中位数绝对偏差,是的 dataframe$MAD<-apply(dataframe,1,mads) dataframe$MAD正如罗纳德在评论中所说的,您应该更具体地告
dataframe$MAD<-apply(dataframe,1,mads)
dataframe$MAD正如罗纳德在评论中所说的,您应该更具体地告诉我们您在哪一方面遇到了困难。此外,最好提供一个虚拟示例数据集以及该集的预期结果。这样可以更好地了解目的
选择标准是否使偏离平均值的总和最大化?如果是这样的话,下一个代码将执行您想要的操作。它没有针对速度进行优化,旨在易于遵循
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)
你应该展示你已经尝试过的东西。例如,我乐观地认为您能够计算给定行的中值绝对偏差。
dataframe<-dataframe[rev(order(dataframe$MAD)),]
genes.vec<-as.character(dataframe$Gene[!duplicated(dataframe$Gene)])
dataframe2<-dataframe[match(genes.vec,dataframe$Gene),]
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)