首页 > 解决方案 > 用长字符串中特定位置的其他字符替换一个字符,并将更改后的字符串在R中递归地保存为新字符串

问题描述

我有一长串

string <- "bdbakdljbbkhkcksbfjsvcjsvksnclndkbksbcsbck"

现在我想用 V1 替换“replace_position”中列出的字符位置,并将新字符串保存为新文件,命名为位置号更改。迭代地改变每个位置

replace_position <- c(4, 5, 19, 24, 30, 36, 39, 40)

v1 <- c("E", "N", "M", "o", "p", "q", "r", "S")
write.csv("4.csv")
write.csv("5.csv")

等等..

预期结果:

4th_string <- "bdbEkdljbbkhkcksbfjsvcjsvksnclndkbksbcsbck"
5th_string <- "bdbaNdljbbkhkcksbfjsvcjsvksnclndkbksbcsbck"

19 等等有没有其他方法可以在 R 中使用 for 循环或正则表达式

标签: r

解决方案


如果打算用单个字符替换该位置的字符,则使用substring

for(i in seq_along(replace_position))
  substr(str1, replace_position[i], replace_position[i]) <- "#"
str1
#[1] "bdb##dljbbkhkcksbf#svcj#vksnc#ndkbk#bc##ck"

正如@RuiBarradas 提到的,这可以写回文件cat

cat(str1, file = "file1.txt")

根据OP的评论,如果替换的值因位置不同而不同,则只需更改赋值的rhs

for(i in seq_along(replace_position))
  substr(str1, replace_position[i], replace_position[i]) <- v1[i] 

str1
#[1] "bdbENdljbbkhkcksbfMsvcjovksncpndkbkqbcrSck"

数据

replace_position <- c(4, 5, 19, 24, 30, 36, 39, 40)
str1 <- "bdbakdljbbkhkcksbfjsvcjsvksnclndkbksbcsbck"
v1 <- c("E", "N", "M", "o", "p", "q", "r", "S")

推荐阅读