r - 基于特定模式对 R 中的字符向量进行子集化
问题描述
我有一个字符 id 向量,作为 R 中数据框的行名。行名具有以下模式:
head(foo)
[1] "ENSG00000197372 (ZNF675)" "ENSG00000112624 (GLTSCR1L)"
[3] "ENSG00000151320 (AKAP6)" "ENSG00000139910 (NOVA1)"
[5] "ENSG00000137449 (CPEB2)" "ENSG00000004779 (NDUFAB1)"
我想以某种方式对上述行名(〜700个条目)进行子集化,以便仅保留括号部分中的基因符号 - 即 ZNF675 - 并删除其余部分:这可以通过像 gsub 这样的函数吗?
解决方案
我们可以sub
用来匹配不是(
的字符,然后捕获里面的(
不是a的字符,并将其)
替换\\1
为捕获组的反向引用()
row.names(foo) <- sub("^[^(]+\\(([^)]+).*", "\\1", row.names(foo))
row.names(foo)
#[1] "ZNF675" "GLTSCR1L" "AKAP6" "NOVA1" "CPEB2" "NDUFAB1"
或使用str_extract
fromstringr
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)")
推荐阅读
- javascript - React:设置 State 或设置 Prop 而不使用 Rerender
- java - 尽管授予了 WRITE_EXTERNAL_STORAGE,但 ContextCompat.checkSelfPermission 返回 -1
- html - 背景图像未正确定位
- postgresql - 如何在 GraphQL 中使用 Sequelize 多对多关联进行查询?收到空错误
- c - 如何使用指针声明访问二维数组中的值
- c - scanf 没有正确保存值
- ios - 如何使用swift设计锁屏?
- javascript - 什么被认为是测试返回 http observables 的方法的正确方法?
- python-3.x - 如何在 python 3.7 中使用 PULP 实现 LPP 功能?
- haskell - 用do创建嵌套if else语句的语法是什么