我们可以用sub
。我们匹配一个或多个不存在的字符:
从字符串的开头(^([^:]+
) 后面跟着一个:
,后跟一个字符而不是:
([^:]+
),将其放入捕获组中,即括号内。我们用捕获组替换(\\1
)在替换中。
sub('^([^:]+:[^:]+).*', '\\1', myvec)
#[1] "chr2:213403244" "chr7:55240586" "chr7:55241607"
以上适用于发布的示例。对于一般情况,要在第 n 个分隔符之后删除,
n <- 2
pat <- paste0('^([^:]+(?::[^:]+){',n-1,'}).*')
sub(pat, '\\1', myvec)
#[1] "chr2:213403244" "chr7:55240586" "chr7:55241607"
使用不同的“n”进行检查
n <- 3
并重复相同的步骤
sub(pat, '\\1', myvec)
#[1] "chr2:213403244:213403244" "chr7:55240586:55240586"
#[3] "chr7:55241607:55241607"
或者另一种选择是分割:
进而paste
n 个组件在一起。
n <- 2
vapply(strsplit(myvec, ':'), function(x)
paste(x[seq.int(n)], collapse=':'), character(1L))
#[1] "chr2:213403244" "chr7:55240586" "chr7:55241607"