我有这样的事情:
text <- "abcdefg"
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
"abcde.fg"
Run Code Online (Sandbox Code Playgroud)
如何在不向向量分配新字符串的情况下实现此目的,text
而是改变向量本身的元素?最后,我想随机插入点,实际上不是点,而是矢量的字符元素.
我们可以尝试sub
将前5个字符(.{5})
捕获为group((.*)
),然后是另一个捕获组()中的一个或多个字符,然后替换为第一个group(\\1
)的后向引用,.
后跟第二个反向引用(\\2
).
sub("(.{5})(.*)", "\\1.\\2", text)
#[1] "abcde.fg"
Run Code Online (Sandbox Code Playgroud)
注意:此解决方案是直接的,不需要paste
任何内容.
另外,substring
随着paste
工作:
paste(substring(text, c(1,6), c(5,7)), collapse=".")
"abcde.fg"
Run Code Online (Sandbox Code Playgroud)
该substring
函数接受向量启动 - 停止参数,并在所需位置"拆分"该字符串.然后我们可以将paste
这些元素放在一起并与崩溃参数一起.
如果不依赖于向量参数,我们可以使用更新的推荐substr
函数:
paste(c(substr(text, 1, 5), substr(text, 6,7)), collapse=".")
[1] "abcde.fg"
Run Code Online (Sandbox Code Playgroud)
请注意,正如konrad-rudolph所提到的,这将创建向量的副本.