Преобразовать число в букву, используя модуль - PullRequest
0 голосов
/ 13 апреля 2019

Используя буквы [1:26] с модулем 5, для контрольного символа в личном идентификационном номере создается «символ (0)», который должен быть «E». Есть ли способ обойти это? Это уменьшенная версия, но принцип тот же.

Я могу сгенерировать список векторов символов, но ноль из модуля создает выпадение для «11E».

PIN <- c("08A","07D","10C","11E", "10C")
DATA <- data.frame(PIN)
DATA %>% mutate(PIN = as.character(PIN)) -> DATA

LETTERS[(as.numeric(substr(DATA$PIN, start = 2, stop = 2)) * 7 +
         as.numeric(substr(DATA$PIN, start = 1, stop = 1)) * 8 ) %% 5] 

Формирует

[Output1] "A" "D" "C" "C"

В конце концов, я хочу запустить его снова для проверки альфа-символа для подтверждения номера.

substr(DATA$PIN, start = 3, stop = 3)
[Output2] "A" "D" "C" "E" "C"

Выпадение нарушает последовательность и вызывает смещения

[Output1] == [Output2]
[1]  TRUE TRUE TRUE FALSE FALSE

1 Ответ

0 голосов
/ 13 апреля 2019

Один из них дает значение 0 с %%. Непонятно с условиями, но мы можем исправить с ifelse

i1 <-  (as.numeric(substr(DATA$PIN, start = 2, stop = 2)) * 7 +
       as.numeric(substr(DATA$PIN, start = 1, stop = 1)) * 8 ) %% 5
LETTERS[ifelse(i1 == 0, max(i1) + 1, i1)]
#[1] "A" "D" "C" "E" "C"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...