首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基因表达数据筛选

基因表达数据筛选
EN

Stack Overflow用户
提问于 2015-03-13 10:18:08
回答 3查看 83关注 0票数 0

我有一个包含3064行和27列的矩阵,其中包含-0.52.0之间的值。我希望提取至少有一次值为>=0.5的每一行。作为回答,我想要整行在它的原矩阵形式。

假设m是我的矩阵,我试过:

代码语言:javascript
复制
m[m[1:190,1:16]>0.5,1:16]

由于这个命令不接受190行以上的进程,所以我选择了190行,但不知怎么出错了,因为它给了我值也小于0.5的行。

是否可以编写任何可用于整个矩阵的函数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-13 10:54:01

如果数据名为df,也可以这样做。

代码语言:javascript
复制
df2<- df[apply(df, MARGIN = 1, function(x) any(x >= 0.5)), ]
票数 1
EN

Stack Overflow用户

发布于 2015-03-13 10:37:29

代码语言:javascript
复制
library(fBasics)
m2 <- subset(x = m, subset = rowMaxs(m)>=0.5)
票数 1
EN

Stack Overflow用户

发布于 2015-03-13 10:38:52

mm=m[1:190,1:16]>0.5给出的是一个布尔矩阵,表示m[1:190,1:16]的哪个值大于0.5。

然后,当您执行m[mm]时,它将mm看作一个向量并给出相应的值。事情是dim(m) = 3064*27而不是dim(m[1:190,1:16]) = 190*16。这意味着mm的前27个值将用于获得m的第一行,而它们对应于mm的第二行的一部分。

因此,为了只有大于0.5的元素,需要将matrix应用于具有相同维度的m[1:190,1:16],即:

代码语言:javascript
复制
`m[1:190,1:16][m[1:190,1:16]>0.5, 1:16]

但是这里要做的是m[mm, 1:16],所以您将mm的每个单独值都看作一个行号,而它是一个190*16矩阵。这意味着您指定了190*16=3040行,因为m只具有3064行,因此它不能与更多的行一起工作。

您需要的是一个长度为190 (甚至3064 )的向量,指定要选择的行。您可以使用rowSums(m >=0.5)>0获得这个向量,这意味着每一行的值都大于0,大于0.5。然后通过以下方式获得输出:

代码语言:javascript
复制
m[rowSums(m >= 0.5) > 0,]

它将适用于整个矩阵。请注意,如果至少有一个值大于0.5,则某些值将小于0.5,因为您选择了整行。

编辑

对于值为<0.5的行,想法是相同的:

代码语言:javascript
复制
m[rowSums(m < 0.5) > 0,]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29029710

复制
相关文章

相似问题

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