将一个字符替换为长字符串中特定位置的其他字符,然后在R中递归将更改后的字符串另存为新字符串

时间:2018-08-16 20:42:33

标签: r

我的字符串很长

purch_dt
8/18/2014
9/27/2014
1/3/2015
10/29/2016
11/5/2016
2/9/2017
3/1/2017
6/29/2017
12/27/2017
2/25/2018

现在,我想用V1替换“ replace_position”中列出的字符位置,并将新字符串另存为名为位置更改的新文件。重复更改每个位置

string <- "bdbakdljbbkhkcksbfjsvcjsvksnclndkbksbcsbck"

以此类推。

预期结果:

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

第19位,依此类推 还有其他方法可以在R中使用for循环或正则表达式吗?

1 个答案:

答案 0 :(得分:1)

如果打算用单个字符替换该位置上的字符,请使用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")