如何使用 R 中的正则表达式提取字符第一次出现和第二次出现之间的部分?
How to extract a portion between the first and second occurrence of a character using regular expressions in 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)
我有一个如下所示的数据框:
我需要提取第一次和第二次出现之间的 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)