首页 > 解决方案 > 如何使用 R 中的正则表达式提取字符的第一次和第二次出现之间的部分?

问题描述

我有一个看起来像这样的数据框:

在此处输入图像描述

我需要在第一次和第二次出现 | 之间提取 UniProt ID。仅从第 5 行到第 14 行。

预期结果:

A0A3Q8IUE6
A4I9M8
E9BQL4
Q4Q3E9
A0A640KX53
E9B4M7
.
.

标签: rregexpattern-matching

解决方案


我们可以尝试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)

推荐阅读