r- преобразовать слово в числа - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь преобразовать строку «abcd» в строку чисел, в которой каждое число будет указывать позицию этой конкретной c буквы в алфавите, в данном случае это необходимо: «1234». Есть ли функция для этого в R?

Я пробовал это:

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

это не сработало, так как в строке есть несколько символов

Ответы [ 3 ]

2 голосов
/ 08 января 2020

Еще один вариант - chartr

TestString = "abcd"

chartr(paste(letters[1:10], collapse=''), 
    paste(c(1:9,0), collapse=''), TestString)
2 голосов
/ 08 января 2020

Если это на самом деле строка без пробелов и т. Д. c, которая должна быть сохранена, и просто последовательность строчных букв, вы можете использовать charToRaw, а затем преобразовать в число c и вычесть 96.

Причина, по которой вам необходимо вычесть 96, заключается в том, что as.numeric(chartoRaw(x)) задает положение символов в таблице ascii , а az начинается с позиции 97 на этой таблице.

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

library(magrittr)

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

Редактировать: @akrun предлагает лучший метод ниже. Вы можете заменить charToRaw %>% as.numeric на utf8toInt.

2 голосов
/ 08 января 2020

Мы можем использовать 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"
...