r- 将单词转换为数字

r- convert a word to numbers

我正在尝试将一个字符串 "abcd" 转换为一串数字,其中每个数字将指示该特定字母在字母表中的位置,在这种情况下需要:“1234”。 R 中是否有执行此操作的功能?

我试过这个:

str2int <- function(x) {
   match(x, letters[1:26])
}
str2int("abcd")

这不起作用,因为字符串中有多个字符

我们可以在函数内部使用strsplit

str2int <- function(x) {
        x1 <- strsplit(x, "")[[1]]
        paste(match(x1, letters), collapse="")
 }
str2int("abcd")
#[1] "1234"

或者另一种选择是gsubfn

library(gsubfn)
gsubfn(".", ~ match(x, letters), "abcd")
#[1] "1234"

还有一个选项是chartr

TestString = "abcd"

chartr(paste(letters[1:10], collapse=''), 
    paste(c(1:9,0), collapse=''), TestString)

如果它实际上是一个没有空格等应该被保留的字符串并且只是一系列小写字母,你可以使用charToRaw然后转换为数字并减去96。

之所以需要减去 96,是因为 as.numeric(chartoRaw(x)) 给出了 ascii table 上字符的位置,而 a-z 从 table 上的位置 97 开始。

test <- paste(letters, collapse = '')
test
# [1] "abcdefghijklmnopqrstuvwxyz"

library(magrittr)

test %>% 
  charToRaw %>% 
  as.numeric %>% 
  '-'(96) %>% 
  paste(collapse = '')
# [1] "1234567891011121314151617181920212223242526"

编辑:@akrun 在下面建议了一个更好的方法。您可以将 charToRaw %>% as.numeric 替换为 utf8toInt.