根据特定模式将R中的字符向量子集化

时间:2018-11-06 18:27:25

标签: r subset data-manipulation

我有一个字符ID的向量,作为R中数据帧的行名。行名具有以下模式:

head(foo)
[1] "ENSG00000197372 (ZNF675)"   "ENSG00000112624 (GLTSCR1L)"
[3] "ENSG00000151320 (AKAP6)"    "ENSG00000139910 (NOVA1)"   
[5] "ENSG00000137449 (CPEB2)"    "ENSG00000004779 (NDUFAB1)"

我想以某种方式对上述行名(〜700个条目)进行子集化,以便仅将基因符号保留在括号中,即ZNF675-删除其余部分:是否可以通过gsub之类的函数实现?

1 个答案:

答案 0 :(得分:2)

我们可以使用sub来匹配非(的字符,然后捕获(中不是)的字符,并将其替换为反向引用( \\1)的捕获组

row.names(foo) <- sub("^[^(]+\\(([^)]+).*", "\\1", row.names(foo))
row.names(foo)
#[1] "ZNF675"   "GLTSCR1L" "AKAP6"    "NOVA1"    "CPEB2"    "NDUFAB1" 

或使用str_extract中的stringr

library(stringr)
str_extract(row.names(foo), "(?<=\\()[^)]+")

数据

foo <- data.frame(col1 = rnorm(6))
row.names(foo) <- c("ENSG00000197372 (ZNF675)", 
  "ENSG00000112624 (GLTSCR1L)", "ENSG00000151320 (AKAP6)", 
     "ENSG00000139910 (NOVA1)",
   "ENSG00000137449 (CPEB2)", "ENSG00000004779 (NDUFAB1)")