2016-05-15 2 views
3

У меня есть куча писем, и я не могу для жизни понять, как преобразовать их в их эквивалент числа.конвертировать письма в номера

letters[1:4] 

Есть функция

numbers['e'] 

который возвращает

5 

или что-то определенный пользователем (т.е. 1994)?

Я хочу преобразовать все 26 букв в определенное значение.

ответ

0

спасибо за все идеи, но я думдум.

Вот что я сделал. Сделал отображение каждой буквы на определенный номер, затем назвал каждую букву

df=data.frame(L=letters[1:26],N=rnorm(26)) 
df[df$L=='e',2] 
7

Создать вектор подстановок и использовать простые Подменю:

x <- letters[1:4] 
lookup <- setNames(seq_along(letters), letters) 
lookup[x] 
#a b c d 
#1 2 3 4 

Используйте unname, если вы хотите, чтобы удалить имена.

13

Я не знаю о «предварительно построенной» функции, но такое сопоставление довольно легко настроить с помощью match. Для конкретного примера, вы даете, совпадающий с письмом к своему положению в алфавите, мы можем использовать следующий код:

myLetters <- letters[1:26] 

match("a", myLetters) 
[1] 1 

Это почти так же легко связать другие значения букв. Ниже приведен пример случайного выбора целых чисел.

# assign values for each letter, here a sample from 1 to 2000 
set.seed(1234) 
myValues <- sample(1:2000, size=26) 
names(myValues) <- myLetters 

myValues[match("a", names(myValues))] 
a 
228 

Обратите также внимание на то, что этот метод можно распространить и на упорядоченные коллекции букв (строк).

+0

Я предпочитаю это решение над 'which (x == letters)', потому что он векторизован (я могу получить буквенные индексы для вектора символов). – rensa

5

Вы можете попробовать эту функцию:

letter2num <- function(x) {utf8ToInt(x) - utf8ToInt("a") + 1L} 

Вот короткий тест:

letter2num("e") 
#[1] 5 
set.seed(123) 
myletters <- letters[sample(26,8)]] 
#[1] "h" "t" "j" "u" "w" "a" "k" "q" 
unname(sapply(myletters, letter2num)) 
#[1] 8 20 10 21 23 1 11 17 

Функция вычисляет код utf8 письма, который он передал, вычитает из этого значения код utf8 буквы «a» и добавляет к этому значению номер один, чтобы гарантировать, что соглашение об индексировании R наблюдается, согласно к которой нумерация букв начинается с 1, а не с 0.

Код работает, потому что числовая последовательность кодов utf8, представляющих буквы, соответствует буквенному порядку.


Для заглавных букв можно использовать, соответственно,

LETTER2num <- function(x) {utf8ToInt(x) - utf8ToInt("A") + 1L} 
2

which функция представляется целесообразным здесь.

which(letters == 'e') 
#[1] 5 
Смежные вопросы