我有一個表,開始低於:如何分類和處理數據
Control_H1455_121005_4 Case_X1456_121005_1 Case_V1457_121005_7 Control_K1461_121005_2
ENSG00000419.8 0 0 14 3
ENSG00000457.8 2 0 1 0
ENSG00000460.11 18 3 16 6
ENSG00000938.7 0 0 0 0
更新:
首先,我想改變colnames。只有第二個下劃線之前的部分很重要,例如在Control_H1455_121005_4中,我想將其縮短爲Control_H1455。這是我的代碼到目前爲止:
gsub("^.*?_","_","Case_H1455_121005_4")
但是,這返回
"_H1455_121005_4"
。我想保留的部分實際上是Case_H1455
。所以我只想保留所有的字符,直到第二個下劃線。更新:對(2),我有以下代碼:
#separating data into Control & Case groups data_con=data[which(substring(names(data),2,2) %in% c("o"))] data_case=data[which(substring(names(data),2,2) %in% c("a"))] #delete rows if both case and control groups have >= 90% cols that contain 0 #data <- data[(rowSums(data_case==0)/ncol(data_case) < 0.9 & rowSums(data_con==0)/ncol(data_con) < 0.9) , ]
這似乎是工作。
我想通過每行進行過濾並將該行中的數據分爲兩組:控制和案例。然後,我想要刪除一個行當且僅當它滿足以下條件:> = = 90%的列在條件和控制組中都包含0。因此,在此示例表中,爲了刪除一行,組和控件都必須包含大於或等於90%的包含0的列。所以這裏是最後一行。如果案例組包含> = 90%的cols有0,但對照組有< 90%cols與0(反之亦然),那麼應保留該行。要做到這一點,我目前有以下代碼:
data <- data[rowSums(data==0)/ncol(data) < 0.9, ]
但這並不是按照Case和Control分隔每一行,而是分別查看每個組。
請記住,實際數據中還有更多列和行,並且控件和案例從列到列隨機出現。
因此,任何數字(1)的幫助將不勝感激!
如何爲(1)從不同的[您剛纔的問題(http://stackoverflow.com/問題/ 17970287/R-如何到變化最列名功能於一個數據幀爲基礎上-A-規範)? – Thomas
對於(2),你必須'rowSums'使用哪些列。 – Thomas
對於(1)我想刪除部分的colname,而不是替換「SM」部分。我有'gsub(「^。*?_」,「_」,「Case_H1455_121005_4」),但它給出了「_H1455_121005_4」這是第一個下劃線之後的部分。但是我希望** ** ** 2nd **下劃線之前的部分**。所以它應該是'Case_H1455'。有什麼建議麼? (2)的 – zfz