我有一个向量
test <- c("NNNCTCGTNNNGTCGTNN", "NNNNNCGTNNNGTCGTGN")
Run Code Online (Sandbox Code Playgroud)
我想使用相同长度的“ - ”替换所有元素头部中的所有N。当我使用函数时,只用一个“-”替换。gsub
gsub("^N+", "-", test)
# [1] "-CTCGTNNNGTCGTNN" "-CGTNNNGTCGTGN"
Run Code Online (Sandbox Code Playgroud)
但我希望结果看起来像这样
# "---CTCGTNNNGTCGTNN", "-----CGTNNNGTCGTGN"
Run Code Online (Sandbox Code Playgroud)
有没有可以做到这一点的R函数?感谢您的耐心和建议。
一种方法是使用stringr支持正则表达式回调的函数:
test <- c("NNNCTCGTNNNGTCGTNN", "NNNNNCGTNNNGTCGTGN")
repl <- function(x) { gsub("N", "-", x) }
str_replace_all(test, "^N+", function(m) repl(m))
[1] "---CTCGTNNNGTCGTNN" "-----CGTNNNGTCGTGN"
Run Code Online (Sandbox Code Playgroud)
这里的策略是首先匹配^N+以捕获一个或多个领先N。然后,我们将该匹配传递给回调函数,该函数N用破折号替换每个匹配项。