怎样一个角色中的R
添加到字符串我有这样的事情:怎样一个角色中的R
text <- "abcdefg"
,我想是这样的:
"abcde.fg"
我怎么能做到这一点不分配一个新的字符串到矢量text
,而是改变矢量本身的元素?最后,我想随机插入点,实际上不是点而是矢量的字符元素。
我们可以将sub
尝试前5个字符捕捉如随后在另一捕捉组中的一个或多个字符((.*)
)的基团((.{5})
),然后用第一组(\\1
)的逆向引用替换后跟一个.
接下来是第二次反向引用(\\2
)。
sub("(.{5})(.*)", "\\1.\\2", text)
#[1] "abcde.fg"
注:此解决方案是直接的,不需要paste
任何东西在一起。
此外,substring
与paste
将工作:
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"
注意,由康拉德·鲁道夫提到的,这将创建载体的拷贝。
我理解文档的方式,'substring'只存在S兼容性,并且应该使用'substr'来代替。但是,这并不明确。 –
这或多或少是我的读物。 'substring'的另一个优点是'substr'不需要向量启动和停止参数。 – lmo
是的,'substr'需要一个'stop'参数(尽管'susbtring'的默认值是疯狂的,它应该是一个安全的值,永远不会通过)。我不确定为什么'substr'完全存在,说实话...'substring'实际上看起来更好。 –
澄清:你不能这样做。你总是需要创建一个新对象(这在所有语言中都是不正确的,但在某些情况下,特别是在R中)。 –
另一个选项'text rawr