在R语言中按起止索引替换字符串?substr方法未达预期
R语言按起止索引替换字符串指定部分的正确方法
问题原因
你用substr赋值得到不符合预期的结果,是因为substr的赋值逻辑是逐个替换指定位置的字符,而非直接删除目标区间并插入新字符串。比如你指定替换第1-15位,而"orange"只有6个字符,所以仅替换前6位,第7-15位仍保留原字符串的内容,最终得到"oranges a funny cat"。
正确实现方法
方法1:基础字符串拼接
直接提取原字符串中目标区间之后的部分,与新字符串拼接:
string <- "this is a funny cat" new_string <- paste0("orange", substr(string, 16, nchar(string))) new_string # 输出结果:[1] "orange cat"
这里substr(string, 16, nchar(string))获取原字符串第16位到末尾的内容(即"cat"),再和"orange"拼接得到目标结果。
方法2:使用stringr包的正则替换
如果你习惯用stringr工具包,可以通过正则匹配前15个字符并替换:
library(stringr) string <- "this is a funny cat" new_string <- str_replace(string, "^.{15}", "orange") new_string # 输出结果:[1] "orange cat"
正则表达式^.{15}匹配字符串开头的任意15个字符,替换为"orange"即可直接实现需求。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

