R 如何基于列名对行中的数据进行分类和操作

R 如何基于列名对行中的数据进行分类和操作,r,filter,bioinformatics,R,Filter,Bioinformatics,我有一张桌子,开始如下: Control_H1455_121005_4 Case_X1456_121005_1 Case_V1457_121005_7 Control_K1461_121005_2 ENSG00000419.8 0 0 14 3 ENSG00000457.8

我有一张桌子,开始如下:

                    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      
更新:

  • 首先我想更改colname。只有第二个下划线之前的部分才重要,因此,例如在Control_H1455_121005_4中,我想将其缩短为Control_H1455。以下是我目前的代码:

    gsub("^.*?_","_","Case_H1455_121005_4")
    
    但这将返回
    “\u H1455\u 121005\u 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) , ]
    
    data <- data[rowSums(data==0)/ncol(data) < 0.9, ]
    
    #将数据分为控制组和案例组
    data_con=data[其中(子字符串(名称(数据),2,2)%in%c(“o”)]
    data_case=data[其中(子字符串(名称(数据),2,2)%in%c(“a”)]
    #如果案例组和对照组的列数均大于等于90%且包含0,则删除行
    
    #数据=在病例组和对照组中,90%的COL均含有0。因此,在这个示例表中,为了删除一行,Control和Case组必须分别包含>=90%的包含0的col。所以这是最后一排了。如果病例组中含有>=90%的COL为0,而对照组为,我不确定,但我认为这可能会有帮助

    # 1)
    # assuming that the structure of "_" does not change
    colnames(data) <- sapply(colnames(data),
                             function(x){
                                paste(unlist(strsplit(x, "_"))[1:2], collapse = "_")
                                              })
    # 2)
    # to sperate case and control
    ind <- grepl("Case", colnames(data))
    
    # assuming that there are at lesast tow cases and tow control
    # otherwise use sum and length
    data[rowSums(data[, !ind]==0)/ncol(data[, !ind]) < 0.9 &
         rowSums(data[,  ind]==0)/ncol(data[,  ind]) < 0.9, ]
    
    #1)
    #假设“u”的结构不变
    
    colnames(data)与(1)有何不同?对于(2),您必须
    rowSums
    使用哪些列。对于(1)我想删除colname的一部分,而不是替换“SM”部分。我有
    gsub(“^.*?”,“,”Case\u H1455\u 121005\u 4”)
    ,但它给出了
    “\u H1455\u 121005\u 4”
    ,这是第一个下划线后面的部分。但是我想要第二条下划线之前的部分。所以它应该是
    案例_H1455
    。有什么建议吗?对于(2),我有这个
    data\u con=data[which(在%c(“o”)中的子字符串(名称(数据),2,2)%]
    data\u case=data[which(在%c(“a”)中的子字符串(名称(数据),2,2)%]
    数据编辑您的问题以显示您尝试了什么:(1)。把这些东西作为评论贴出来会让人很难阅读。是的,这就是我要找的!非常感谢:-)