使用 grepl 过滤列以保持特定字符串匹配

Filter column using grepl to keep particular string match

我的计数列标有不同的样本类型。为了开始比较,我想对特定的样本组进行子集化。

为了做到这一点,我尝试了这个

df2 <- df1[,!grepl("pH|B|M|C|G|L", colnames(df1))]

我的objective是保留以HTCGA

开头的样本

当我在 运行 上面的行中,它还删除了标记为 comlumn 的 TCGA,因为它包含也存在于 TCGA 中的字母。

我试过另一种方式

df2 <- df1[,grepl("H|TCGA", colnames(df1))]

这里的问题是因为我也选择了标记为 pH 值的样本。

如何解决。

任何帮助或建议都非常有用

names(df1)
  [1] "H1"           "H2"           "H3"           "H4"           "B11"          "B12"          "B1"           "B2"           "B3"          
 [10] "B4"           "B5"           "B6"           "B7"           "B8"           "B9"           "C1"           "C2"           "C3"          
 [19] "C4"           "G1"           "G2"           "G3"           "G4"           "L1"           "L2"           "L3"           "L4"          
 [28] "L5"           "L6"           "L7"           "L8"           "M1"           "M2"           "M3"           "M4"           "pH10"        
 [37] "pH11"         "pH12"         "pH1"          "pH2"          "pH3"          "pH4"          "pH5"          "pH6"          "pH7"         
 [46] "pH8"          "pH9"          "TCGA-AB-2856" "TCGA-AB-2849" "TCGA-AB-2971"

使用^匹配字符串的开头,如

df2 <- df1[,grepl("^H|^TCGA", colnames(df1))]

我们也可以将 dplyr 与 starts_with():

一起使用
library(dplyr)

df1 %>%
    select(starts_with(c('H', 'TCGA'))