怎样一个角色中的R

问题描述:

添加到字符串我有这样的事情:怎样一个角色中的R

text <- "abcdefg" 

,我想是这样的:

"abcde.fg" 

我怎么能做到这一点不分配一个新的字符串到矢量text,而是改变矢量本身的元素?最后,我想随机插入点,实际上不是点而是矢量的字符元素。

+1

澄清:你不能这样做。你总是需要创建一个新对象(这在所有语言中都是不正确的,但在某些情况下,特别是在R中)。 –

+0

另一个选项'text rawr

我们可以将sub尝试前5个字符捕捉如随后在另一捕捉组中的一个或多个字符((.*))的基团((.{5})),然后用第一组(\\1)的逆向引用替换后跟一个.接下来是第二次反向引用(\\2)。

sub("(.{5})(.*)", "\\1.\\2", text) 
#[1] "abcde.fg" 

注:此解决方案是直接的,不需要paste任何东西在一起。

此外,substringpaste将工作:

paste(substring(text, c(1,6), c(5,7)), collapse=".") 
"abcde.fg" 

substring函数接受矢量启动停止的论点和“分裂”的字符串,在需要的位置。然后我们可以将这些元素与collapse参数结合在一起使用。

不依赖于向量参数,我们可以使用较新的,并建议substr功能:

paste(c(substr(text, 1, 5), substr(text, 6,7)), collapse=".") 
[1] "abcde.fg" 

注意,由康拉德·鲁道夫提到的,这将创建载体的拷贝。

+0

我理解文档的方式,'substring'只存在S兼容性,并且应该使用'substr'来代替。但是,这并不明确。 –

+0

这或多或少是我的读物。 'substring'的另一个优点是'substr'不需要向量启动和停止参数。 – lmo

+0

是的,'substr'需要一个'stop'参数(尽管'susbtring'的默认值是疯狂的,它应该是一个安全的值,永远不会通过)。我不确定为什么'substr'完全存在,说实话...'substring'实际上看起来更好。 –