[英]Mapping Letters to Numbers in R
我有一個由n
字母組成的字符串向量,例如"ABCDEF"
我需要將它映射到某個唯一的數字。 當然,直觀的做法是提取所有單個字母的letter
,然后通過
match(letter,LETTERS)
但這會導致大n
數字太大,因為每個字母(從01
到26
)我都需要 2 位數字。
我現在的想法是將字符串的每個組合與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
以至於
> f("AAAA")
[1] 1
> f("AABC")
[1] 29
> f("ZZZZ")
[1] 456976
雖然這可能很聰明,但使用因子可能更簡單,更容易理解。 您還可以保持字符串格式接近手,同時將其編碼為整數節省空間。
如果您需要數據庫中的整數(這將更好地連接它們),那么您可以使用as.integer(factor_column)
將因子轉換為 int 並且您也將擁有整數變體。
您將失去的是映射的確定性,如果這不僅僅是一次性數據加載,這對您在數據庫世界中可能很重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.