【问题标题】:When multiple observations are present for a variable in a matrix of observations, picking the most variable observation per variable in R当观察矩阵中的变量存在多个观察值时,选择 R 中每个变量的变量最多的观察值
【发布时间】:2013-12-03 00:19:00
【问题描述】:

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

【问题讨论】:

  • 你应该展示你尝试过的东西。例如,我很乐观您能够计算给定行的中值绝对偏差。

标签: r filtering


【解决方案1】:

正如罗纳德在 cmets 中所说,您应该更具体地告诉我们您在哪个部分苦苦挣扎。此外,最好提供一个虚拟示例数据集和该集合的预期结果。这样可以更好地了解意图。

选择标准是最大化偏离均值的总和吗?如果是这样,下一个代码会执行您想要的操作。它没有针对速度进行优化,旨在易于理解。

 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-27
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    相关资源
    最近更新 更多