如何在 R 中的第二个分隔符之后提取字符串



我的向量为

dt <- c("1:7984985:A:G", "1:7984985-7984985:A:G", "1:7984985-7984985:T:G")

我想在 2:之后提取所有内容.

我想要的结果是A:G , A:G, T:G

对此的解决方案是什么?

我们可以使用sub匹配一个或多个不是:([^:]+( 的字符的两个实例,后跟字符串开头的:(^( 并将其替换为空白 (""(

sub("^([^:]+:){2}", "", dt)
#[1] "A:G" "A:G" "T:G"

也可以用trimws来完成(如果不是基于位置(

trimws(dt, whitespace = "[-0-9:]")
#[1] "A:G" "A:G" "T:G"
<小时 />

或使用stringrstr_remove

library(stringr)
str_remove(dt, "^([^:]+:){2}")
#[1] "A:G" "A:G" "T:G"

您可以使用sub,捕获要保留在捕获组中的项目(...)并在替换参数中引用它们以sub

sub("^.:[^:]+:(.:.)", "\1", dt, perl = T)
[1] "A:G" "A:G" "T:G"

或者,您可以使用str_extract和积极的后视(?<=...)

library(stringr)
str_extract(dt, "(?<=:)[A-Z]:[A-Z]")
[1] "A:G" "A:G" "T:G"

或者干脆使用 str_split 返回 2 个值的列表。 'str_split("1:7984985:A:G", "\:",n=3([[1]][3]'

最新更新