我有一张桌子,开始如下:
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% 的 cols 在 Case AND Control 组中都包含 0。所以在这个示例表中,为了删除一行,Control 和 Case 组必须各自包含 >=90% 的包含 0 的列。所以这里是最后一行。如果 Case 组包含 >=90% 的 cols 为 0,但 Control 组的 cols <90% cols 为 0(反之亦然),则应保留该行。为此,我目前有以下代码:
data <- data[rowSums(data==0)/ncol(data) < 0.9, ]
但这并没有通过 Case 和 Control 分隔每一行,而是单独查看每个组。
请记住,实际数据中有更多的列和行,并且控制和大小写随机出现在列之间。
因此,我们将不胜感激对数字 (1) 的任何帮助!