簡體   English   中英

基因表達數據矩陣過濾

[英]gene expression datamatrix filtration

我有一個包含3064行和27列的矩陣,其中包含-0.52.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*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的每一行的值都大於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM