添加到字符串我有這樣的事情:怎樣一個角色中的R
text <- "abcdefg"
,我想是這樣的:
"abcde.fg"
我怎麼能做到這一點不分配一個新的字符串到矢量text
,而是改變矢量本身的元素?最後,我想隨機插入點,實際上不是點而是矢量的字符元素。
添加到字符串我有這樣的事情:怎樣一個角色中的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 < - 「abcdefg」; regmatches(text,gregexpr('(?<= ^。{5})',text,perl = TRUE))< - '。';文本' – rawr