首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当观察值矩阵中的一个变量存在多个观察值时,选择R中每个变量最可变的观察值

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

Stack Overflow用户
提问于 2013-11-19 20:31:11
回答 1查看 101关注 0票数 0

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

如何为X1选择最可变的探测器,为X2挑选最可变的探测器,为X3挑选最可变的探测器?我将使用每一行的中位数绝对偏差来计算可变性,以给出可变性的度量。数据帧的维度非常大(439385 X 32)

代码语言:javascript
运行
复制
             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

编辑。

我计算了中位数绝对偏差,是的,使用以下函数

代码语言:javascript
运行
复制
 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个使用匹配命令

代码语言:javascript
运行
复制
dataframe<-dataframe[rev(order(dataframe$MAD)),]
genes.vec<-as.character(dataframe$Gene[!duplicated(dataframe$Gene)])
dataframe2<-dataframe[match(genes.vec,dataframe$Gene),]
EN

回答 1

Stack Overflow用户

发布于 2013-11-20 04:30:58

正如Ronald在评论中所说的那样,你应该更明确地告诉我们你在努力哪一部分。此外,最好提供一个虚拟的示例数据集和该集的预期结果。这样才有可能更好地了解其意图。

选择标准是最大化偏离平均值的总和吗?如果是这样的话,下一段代码将执行您想要的操作。它并没有针对速度进行优化,而是为了易于遵循。

代码语言:javascript
运行
复制
 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20071673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档