【问题标题】:Need to match end of every term in a vector with a certain term R需要将向量中每个术语的结尾与某个术语 R 匹配
【发布时间】:2017-07-23 22:31:00
【问题描述】:

我有一个原始向量样本,并且想要对其进行子集化,以便我有一个较小的向量 tum,其中仅包含以“01A”结尾的术语。我尝试过使用 grepl、grep 和子集,但它给了我不正确的值。

代码如下:

samples <- lihc_data[0,-1]
as.vector(samples)
tum <- subset(lihc_data[0,-1], grepl("01A$", lihc_data[0,-1]) == TRUE)

这是样本向量的一些样子:

 [1] TCGA.BC.A10Q.11A TCGA.BC.A10Q.01A TCGA.DD.A1EB.11A TCGA.DD.A1EB.01A
 [5] TCGA.DD.A1EG.11A TCGA.DD.A1EG.01A TCGA.DD.A1EH.11A TCGA.DD.A1EH.01A
 [9] TCGA.DD.A1EI.11A TCGA.DD.A1EI.01A TCGA.DD.A3A6.11A TCGA.DD.A3A6.01A

【问题讨论】:

    标签: r


    【解决方案1】:

    lihc_data[0,-1] 中的 0 很奇怪。与其他编程语言相比,在 R 中,您永远不会有 0 个索引 afaik。所以你的向量可能是空的。如果您想要 lihc_data data.frame 或矩阵的第一行没有第一个元素,可以尝试as.character(lihc_data[1,-1])

    根据您的代码,这似乎可行:

    samples <- c("TCGA.BC.A10Q.11A", "TCGA.BC.A10Q.01A", "TCGA.DD.A1EB.11A", 
                 "TCGA.DD.A1EB.01A", "TCGA.DD.A1EG.11A", "TCGA.DD.A1EG.01A", 
                 "TCGA.DD.A1EH.11A", "TCGA.DD.A1EH.01A", "TCGA.DD.A1EI.11A", 
                 "TCGA.DD.A1EI.01A", "TCGA.DD.A3A6.11A", "TCGA.DD.A3A6.01A")
    
    subset(samples, grepl("01A$", samples) == TRUE)
    

    这可能更短,更惯用(结果相同):

    grep("01A$", samples, value = TRUE)
    samples[grepl("01A$", samples)]
    

    【讨论】:

      【解决方案2】:

      基本解决方案:

      数据:

       c("TCGA.DD.A1EG.11A", "TCGA.DD.A1EI.11A", "TCGA.DD.A1EG.01A", 
      "TCGA.DD.A1EI.01A", "TCGA.DD.A1EH.11A", "TCGA.DD.A3A6.11A", "TCGA.DD.A1EH.01A", 
      "TCGA.DD.A3A6.01A") -> samples
      

      然后使用简单的向量子集(不需要subset函数):

      samples[grepl("01A$", samples)]
      

      【讨论】:

        【解决方案3】:
        samples <- c("TCGA.BC.A10Q.11A", "TCGA.BC.A10Q.01A", "TCGA.DD.A1EB.11A",
                     "TCGA.DD.A1EB.01A", "TCGA.DD.A1EG.11A", "TCGA.DD.A1EG.01A", 
                     "TCGA.DD.A1EH.11A", "TCGA.DD.A1EH.01A", "TCGA.DD.A1EI.11A",
                     "TCGA.DD.A1EI.01A", "TCGA.DD.A3A6.11A", "TCGA.DD.A3A6.01A")
        
        stringr::str_extract_all(samples, "[:print:]{12}\\.01A") %>% unlist()
        

        结果:

        [1] "TCGA.BC.A10Q.01A" "TCGA.DD.A1EB.01A" "TCGA.DD.A1EG.01A" "TCGA.DD.A1EH.01A"
        [5] "TCGA.DD.A1EI.01A" "TCGA.DD.A3A6.01A"
        

        【讨论】:

        • 这显然不是 OP 的输入数据的样子。从 OP 的 samples 向量的打印方式来看,很明显第一行是 4 个单独的值(请参阅输出左侧括号内的累积计数),而不是由空格分隔的 4 个值的字符串...
        • 如果你熟悉R如何打印向量,那就一目了然了。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-07
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 2013-05-26
        • 1970-01-01
        相关资源
        最近更新 更多