substring() <- value
或substr() <- value
每个单词只能替换单个字符范围。我想知道如果我想替换字符串中的几个不相交的字符,最好的解决方案是什么。我当前的解决方案如下所示。
string <- "a string"
splitted <- strsplit(string,"",T)[[1]]
splitted[c(1,5,8)] <- c("that", "", "ks")
paste(splitted, collapse="")
[1] "that stinks"
当然,这是一个随机的例子。我实际上想替换基因中数百个不同位置的核苷酸。请注意,单个字符(碱基)始终会被单个字符替换,这与我此处的示例相反。
或者我可以调用 substr() <- value
连续地在循环中(我认为如果我使用 substr()
就无法避免循环,因为我需要多次处理先前的结果),但这可能会更慢。
感谢您的建议。
编辑:我的示例具有误导性,这是我的测试函数
replaceCharsInString <-function(string, positions, replacement) {
splitted <- strsplit(string,"",T)[[1]]
splitted[positions] <- replacement #'replacement' is a character vector
paste(splitted,collapse="")
}
> replaceCharsInString("ACCTTTAAGAGATTTAGGGAGA", c(2,5,7), c("G","C","C"))
[1] "AGCTCTCAGAGATTTAGGGAGA"
最佳答案
我不太明白你到底在寻找什么,因为你甚至说你的例子并不代表你实际在做什么。
可以通过使用也称为捕获组的 ()
来实现:
gsub("(.*)(this)(.*)", '\\1him\\3', 'get this off my desk')
[1] "get him off my desk"
括号创建组。然后,R
可以使用双反斜杠表示法引用捕获的组编号:\\1
、\\2
等。这里我有 3组
获取
这个
离开我的办公 table
在我的代码中,我将 this
(第 2 组)替换为 him
。
关于在 R 中替换字符串的不同部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32404667/