用str_sub向量化替换字符串中的多个固定位置字符
我想用*替换单个字符串中的每5个字符。这里有一个MWE:用str_sub向量化替换字符串中的多个固定位置字符,r,stringr,R,Stringr,我想用*替换单个字符串中的每5个字符。这里有一个MWE: x <- "Mary had a little lamb." pos <- c(5, 10, 15, 20) string::sub_str()可以识别这些位置的字符: > stringr::str_sub(string = x, start = pos, end = pos) [1] " " "a" "t" "a" 但是,替换它们不起作用,因为sub_str()希望字符串参数是一个长度与开始和结束参数相同的向量。如
x <- "Mary had a little lamb."
pos <- c(5, 10, 15, 20)
string::sub_str()
可以识别这些位置的字符:
> stringr::str_sub(string = x, start = pos, end = pos)
[1] " " "a" "t" "a"
但是,替换它们不起作用,因为sub_str()
希望字符串参数是一个长度与开始和结束参数相同的向量。如果没有找到,它将回收字符串以匹配开始/结束的长度,并对每个元素进行一次替换:
> stringr::str_sub(string = x, start = pos, end = pos) <- "*"
> x
[1] "Mary*had a little lamb." "Mary had * little lamb."
[3] "Mary had a lit*le lamb." "Mary had a little l*mb."
>stringr::str_sub(string=x,start=pos,end=pos)x
[1] “玛丽有一只小羊羔。”“玛丽有一只小羊羔。”
[3] “玛丽有一只小羊羔。”“玛丽有一只小羊羔。”
关于如何简单地获得所需输出的任何想法,无论是否使用stringr:sub_str(),但最好不使用for循环?这对我来说不起作用(可能你使用的是我没有遵循的快捷方式符号),但分解它是有效的:
y粘贴(replace(unlist(strsplit(x)”),pos,“*”,collapse=”“)
你的方法应该如下:从你的位置生成一个正则表达式模式,然后运行gsub
我希望stringr能把我从正则表达式中解救出来,做一些非常简单的事情。谢谢,我试着不用函数/for循环来完成它。将使这一点更加明确。
foo = function(x, pos, rep = "*"){
tmp = x
for (i in pos) {
substr(tmp, i, i) = rep
}
tmp
}
foo(x, pos)
#[1] "Mary*had * lit*le l*mb."
foo = function(x, pos, rep = "*"){
tmp = x
for (i in pos) {
substr(tmp, i, i) = rep
}
tmp
}
foo(x, pos)
#[1] "Mary*had * lit*le l*mb."