我有一个矩阵,其中3064
行和27
列包含-0.5
和2.0
之间的值。我想提取至少有一次值为>=0.5
的每一行。作为答案,我希望在其原始矩阵形式中有整行。基因表达数据矩阵过滤
考虑m
是我的矩阵,我想:
m[m[1:190,1:16]>0.5,1:16]
由于这个命令不接受更多的则190行的过程中,我去了190行,但不知何故,就错了,因为它给了我行其中也有的值< 0.5。
是否可以编写任何函数,可以应用于整个矩阵?
我有一个矩阵,其中3064
行和27
列包含-0.5
和2.0
之间的值。我想提取至少有一次值为>=0.5
的每一行。作为答案,我希望在其原始矩阵形式中有整行。基因表达数据矩阵过滤
考虑m
是我的矩阵,我想:
m[m[1:190,1:16]>0.5,1:16]
由于这个命令不接受更多的则190行的过程中,我去了190行,但不知何故,就错了,因为它给了我行其中也有的值< 0.5。
是否可以编写任何函数,可以应用于整个矩阵?
,你也可以尝试这样的,如果你的数据名称是DF
df2<- df[apply(df, MARGIN = 1, function(x) any(x >= 0.5)), ]
library(fBasics)
m2 <- subset(x = m, subset = rowMaxs(m)>=0.5)
这里x是什么? – 2015-03-13 10:52:09
这只是参数的名称。它出来了(只使用'subset(m,subset = ...)',但看'?subset'可以更好地理解参数在R中的传递。 – 2015-03-13 10:58:44
什么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]
具有相同的尺寸,即:
`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。然后你得到你的输出:
m[rowSums(m >= 0.5) > 0,]
它会工作的整个矩阵。请注意,如果至少有一个值大于0.5,则选择整行后,某些值将小于0.5。
编辑
对于值<0.5
行的想法是一样的:
m[rowSums(m < 0.5) > 0,]
如果您需要至少有一个值大于等于0.5的行,请尝试' m [rowSums(m> = 0.5)> 0,]' – akrun 2015-03-13 10:22:57
我想要矩阵,而不包含值为“<0的行”。5“ – 2015-03-13 10:30:19
但是你的描述'我想提取每一行,在他的行中至少有一次值大于等于0.5。'在帖子中与你在评论中提到的内容相反。无论如何,请考虑显示一个小例子'(10行,5列)以及基于此的预期结果 – akrun 2015-03-13 10:31:31