将字符串中的所有字符移动到另一个字符

时间:2017-07-29 09:14:48

标签: r string vector

我必须编写一个函数,用固定数字将字符串的字符移动到另一个字符。 字母矢量是:

abc <- c(LETTERS+letters+" "+"."+","+"!"+"?")

当我有例如文本 ”。,!?”我移动字符的数字是3,“,”应该是“?”但在“?”的统计输出“A”。 我的代码:

text<- ".,!?"
move <- 3
abc <- c(LETTERS,letters, " ", ".",",","!","?")
  original <- strsplit(paste(text, collapse=""), "",fixed = TRUE)[[1]]
  crypt <- c()
  i <- 1
  for (i in 1:length(original)) {
    temp.pos <- which(abc==original[i])
    sub1 <- (temp.pos+move)/57 # The sub1 and 2 are for handle a number higher than the length of the vector abc
    sub2 <- floor(sub1)-1 
    crypt.pos <- sub1*57-sub2*57
    print(crypt.pos)
    l <- crypt.pos
    temp.letter <- abc[l]
    crypt <- c(crypt, temp.letter)
  }

我尝试过一些东西,但从未得到过“?”作为“。”的输出

谢谢。

1 个答案:

答案 0 :(得分:0)

我不认为你需要一个for循环来实现你想要达到的目标。您还可以构造一个命名向量来进行字符匹配:

# the named vector
abc <- c(LETTERS,letters, " ", ".",",","!","?")
number <- 2
names(abc) = c(tail(abc,number),head(abc,length(abc)-number))

# test
str = c("ABCD,$")
paste(abc[strsplit(str,split="")[[1]]],collapse="")

输出:

[1] "CDEF?"

如果你想保留字符而不是你的shift-vector中的字符:

str = c("ABCD,$")
splitted = strsplit(str,split="")[[1]]
new_str = abc[splitted]
new_str[is.na(new_str)] = splitted[is.na(new_str)]
paste(new_str,collapse="")

输出:

[1] "CDEF?$"

希望这有帮助!