r - 如何使用 R 中的正则表达式提取字符的第一次和第二次出现之间的部分?
问题描述
我有一个看起来像这样的数据框:
我需要在第一次和第二次出现 | 之间提取 UniProt ID。仅从第 5 行到第 14 行。
预期结果:
A0A3Q8IUE6
A4I9M8
E9BQL4
Q4Q3E9
A0A640KX53
E9B4M7
.
.
解决方案
我们可以尝试strsplit
在这里使用一个apply
函数:
df$output <- sapply(df$x, function(x) strsplit(x, "\\|")[[1]][2])
df
x output
1 A|A0A3Q8IUE6|blah A0A3Q8IUE6
2 B|A4I9M8|meh A4I9M8
数据:
x <- "A|A0A3Q8IUE6|blah"
y <- "B|A4I9M8|meh"
df <- data.frame(x=c(x,y))
注意:如果x
数据框中的某些值不是管道分隔格式,因此不会有第二个元素,则output
可能会分配给原始值。如果您想要一些其他行为,我们可以grepl
用来检测,例如
df$output <- ifelse(grepl("^(?:tr|sp)\\|", df$x),
sapply(df$x, function(x) strsplit(x, "\\|")[[1]][2]),
NA)
推荐阅读
- rabbitmq - RabbitMq 中的高可用性和负载平衡
- javascript - 方法减少javascript
- java - 在sql server中创建表时如何锁定?
- forms - 颤动 - 当键盘出现时,堆栈上的文本如何不起来?
- java - 如何正确发布到双向关系
- c - C 程序 仅在 Visual Studio 中的调试模式下,以编程方式更改 argv 会在程序退出后出现堆损坏错误。如何解决?
- sql - 使用预聚合数据更新事务
- kubernetes - Kubernetes with helm on local persistent volume with docker for Windows
- javascript - JavaScript 在进行递归调用后是否会忽略函数中剩余的代码行?
- json - 从 JWT 获取用户 ID(JSON Web 令牌)