基因表达数据矩阵过滤

时间:2015-03-13 10:18:08

标签: r

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

考虑m是我的矩阵,我试过了:

m[m[1:190,1:16]>0.5,1:16]

由于这个命令不接受超过190行的进程,我去了190行,但不知何故它出错了,因为它给了我行值< 0.5

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

3 个答案:

答案 0 :(得分:1)

library(fBasics)
m2 <- subset(x = m, subset = rowMaxs(m)>=0.5)

答案 1 :(得分:1)

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

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

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

`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.5的值超过0。然后你得到你的输出:

m[rowSums(m >= 0.5) > 0,]

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

修改

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

m[rowSums(m < 0.5) > 0,]

答案 2 :(得分:1)

如果您的数据名称为 df

,您也可以尝试这样做
df2<- df[apply(df, MARGIN = 1, function(x) any(x >= 0.5)), ]