Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用str_sub向量化替换字符串中的多个固定位置字符_R_Stringr - Fatal编程技术网

用str_sub向量化替换字符串中的多个固定位置字符

用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()希望字符串参数是一个长度与开始和结束参数相同的向量。如

我想用*替换单个字符串中的每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()
希望字符串参数是一个长度与开始和结束参数相同的向量。如果没有找到,它将回收字符串以匹配开始/结束的长度,并对每个元素进行一次替换:

> 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."