使用模数将数字转换为字母

时间:2019-04-13 13:34:13

标签: r

使用模数为5的字母[1:26],对于个人识别号码中的校验字符,将创建应为“ E”的“字符(0)”。有办法解决这个问题吗?这是精简版,但原理是相同的。

我可以生成一个字符向量列表,但是模数中的零会导致“ 11E”的缺失。

class ArticleDetailView(generic.DetailView):
    model = Article

    def get_context_data(self, **kwargs):
        pk = self.kwargs['pk']

生成

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"

1 个答案:

答案 0 :(得分:0)

其中之一是使用%%赋予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"