Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中字母到数字的映射_R - Fatal编程技术网

R中字母到数字的映射

R中字母到数字的映射,r,R,我有一个由n字母组成的字符串向量,例如“ABCDEF” 我需要把这个映射到某个唯一的数字。当然,直观的方法是提取所有单个字母字母,然后通过 match(letter,LETTERS) 但这会导致对于大的n,数字太大,因为每个字母(从01到26)需要两位数字 我现在的想法是将字符串的每个组合与1和26^n之间的唯一数字相匹配,利用26^n的大n的位数少于2n这一事实 例如,对于n=4我们得到“AAAA”->1和“ZZZZ”->26^4 我怎样才能在R中做到这一点?我想你应该像下面这样对字母进行编

我有一个由
n
字母组成的字符串向量,例如
“ABCDEF”

我需要把这个映射到某个唯一的数字。当然,直观的方法是提取所有单个字母
字母
,然后通过

match(letter,LETTERS)
但这会导致对于大的
n
,数字太大,因为每个字母(从
01
26
)需要两位数字

我现在的想法是将字符串的每个组合与
1
26^n
之间的唯一数字相匹配,利用
26^n
的大
n
的位数少于
2n
这一事实

例如,对于
n=4
我们得到
“AAAA”->1
“ZZZZ”->26^4


我怎样才能在R中做到这一点?

我想你应该像下面这样对字母进行编码

f <- function(letter) sum((match(unlist(strsplit(letter,"")),LETTERS)-1)*26**((nchar(letter)-1):0))+1

虽然这可能很聪明,但使用因子可能更简单,也更容易理解。您还可以将字符串格式保持在手边,同时将其编码为整数可以节省空间

如果数据库中需要整数(这将更好地进行联接),则可以使用
as.integer(factor\u column)
将因子强制转换为int,还可以使用整数变量


您将失去的是映射的确定性,如果这不仅仅是一次性的数据加载,那么它在DB世界中可能对您很重要。

向量中的字符串也是唯一的吗?是的,但是当新数据进来时它应该工作,所以排序不会完成。这里已经有一个函数用于此,请尝试:
charToRaw(“ABCDEF”)
@zx8754但这并不能保存数字,我仍然需要每一个字母两个,这可能不清楚,但我的意思是:
26^n
2n
大的
n
数字少,这是真的,但我需要数字,因为数据将被读入数据库,每个人都告诉我,用整数而不是字符进行连接更有效。因此,基本上,我试图唯一地映射到整数,同时使数字尽可能小(否则R无法处理)
> f("AAAA")
[1] 1

> f("AABC")
[1] 29

> f("ZZZZ")
[1] 456976