2015-03-13 166 views
0

我有一個矩陣,其中3064行和27列包含-0.52.0之間的值。我想提取至少有一次值爲>=0.5的每一行。作爲答案,我希望在其原始矩陣形式中有整行。基因表達數據矩陣過濾

考慮m是我的矩陣,我想:

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

由於這個命令不接受更多的則190行的過程中,我去了190行,但不知何故,就錯了,因爲它給了我行其中也有的值< 0.5

是否可以編寫任何函數,可以應用於整個矩陣?

+4

如果您需要至少有一個值大於等於0.5的行,請嘗試' m [rowSums(m> = 0.5)> 0,]' – akrun 2015-03-13 10:22:57

+0

我想要矩陣,而不包含值爲「<0的行」。5「 – 2015-03-13 10:30:19

+0

但是你的描述'我想提取每一行,在他的行中至少有一次值大於等於0.5。'在帖子中與你在評論中提到的內容相反。無論如何,請考慮顯示一個小例子'(10行,5列)以及基於此的預期結果 – akrun 2015-03-13 10:31:31

回答

1

,你也可以嘗試這樣的,如果你的數據名稱是DF

df2<- df[apply(df, MARGIN = 1, function(x) any(x >= 0.5)), ] 
1
library(fBasics) 
m2 <- subset(x = m, subset = rowMaxs(m)>=0.5) 
+0

這裏x是什麼? – 2015-03-13 10:52:09

+0

這只是參數的名稱。它出來了(只使用'subset(m,subset = ...)',但看'?subset'可以更好地理解參數在R中的傳遞。 – 2015-03-13 10:58:44

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,則需要應用matrixm[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,]