我有一個矩陣,其中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