2016-08-01 54 views
0

添加到字符串我有這樣的事情:怎樣一個角色中的R

text <- "abcdefg" 

,我想是這樣的:

"abcde.fg" 

我怎麼能做到這一點不分配一個新的字符串到矢量text,而是改變矢量本身的元素?最後,我想隨機插入點,實際上不是點而是矢量的字符元素。

+1

澄清:你不能這樣做。你總是需要創建一個新對象(這在所有語言中都是不正確的,但在某些情況下,特別是在R中)。 –

+0

另一個選項'text < - 「abcdefg」; regmatches(text,gregexpr('(?<= ^。{5})',text,perl = TRUE))< - '。';文本' – rawr

回答

2

我們可以將sub嘗試前5個字符捕捉如隨後在另一捕捉組中的一個或多個字符((.*))的基團((.{5})),然後用第一組(\\1)的逆向引用替換後跟一個.接下來是第二次反向引用(\\2)。

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

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

4

此外,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'實際上看起來更好。 –