[英]gene expression datamatrix filtration
我有一個包含3064
行和27
列的矩陣,其中包含-0.5
和2.0
之間的值。 我想提取具有至少一次值>=0.5
每一行。 作為答案,我希望整行的原始矩陣形式。
考慮m
是我的矩陣,我嘗試過:
m[m[1:190,1:16]>0.5,1:16]
由於此命令不接受超過190行的處理,因此我進行了190行,但不知何故出錯了,因為它使我得到的行也具有<0.5的值 。
是否可以編寫可應用於整個矩陣的任何函數?
library(fBasics)
m2 <- subset(x = m, subset = rowMaxs(m)>=0.5)
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,]
如果您的數據名稱是df,也可以嘗試這樣
df2<- df[apply(df, MARGIN = 1, function(x) any(x >= 0.5)), ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.