2016-07-26 57 views
-2

我有一個數據矩陣的4列和超過20萬行組成的數字,大寫字母,破折號和點的條目。我想把它們表示爲他們的ASCII碼,數字。我嘗試了strtoi,chartoraw和utf8toint函數,但不斷收到錯誤,主要是「要替換的項目數量不是替換長度的倍數」。字符到數字R

如何將整個矩陣轉換爲沒有任何NA強制的數字矩陣?

+3

給一個'dput(頭(your_matrix)'因爲我不能讓你怎麼能在一個矩陣有不同類別 – Tensibai

+3

請仔細閱讀。有關[如何問一個好問題](http://stackoverflow.com/help/how-to-ask)以及如何給出[可重現的示例]的信息(http://stackoverflow.com/questions/5963269/ how-to-make-a-great-r-reproducible-example/5963610)。這會讓別人更容易幫助你。 – Jaap

回答

0

不確定你的問題,但如果你想將字符矩陣轉換爲數字,請考慮加密摘要。

x <- matrix(letters[1:9],3,3) 
x 
    [,1] [,2] [,3] 
[1,] "a" "d" "g" 
[2,] "b" "e" "h" 
[3,] "c" "f" "i" 

digest(x) 
[1] "b94e24be564d1af6dfedba8c3616b56d" 
+0

你好,謝謝你的回答!我會嘗試將列表中的數字合併爲一個數字。例如,c(65,89,65,69,73,65,73,65,73,66,46)是矩陣中的元素之一。我想將其表示爲658965697365736646並將其解釋爲整數。那可能嗎? –

0
> (tmp <- matrix(c(LETTERS[1:20],"3","?","a","-"),6)) 
    [,1] [,2] [,3] [,4] 
[1,] "A" "G" "M" "S" 
[2,] "B" "H" "N" "T" 
[3,] "C" "I" "O" "3" 
[4,] "D" "J" "P" "?" 
[5,] "E" "K" "Q" "a" 
[6,] "F" "L" "R" "-" 
> (tmp <-apply(tmp,c(1,2), utf8ToInt)) 
    [,1] [,2] [,3] [,4] 
[1,] 65 71 77 83 
[2,] 66 72 78 84 
[3,] 67 73 79 51 
[4,] 68 74 80 63 
[5,] 69 75 81 97 
[6,] 70 76 82 45 
> intToUtf8(tmp) 
[1] "ABCDEFGHIJKLMNOPQRST3?a-" 

編輯按評論:

#Altered paste function which we will call twice 
pasteC <- function(x){paste(x,collapse="")} 
#Replicate your example of a cell elements being a list 
values <-c(LETTERS[1:20],"3","?","a","-") 
#place in a data.frame 
tmp <- data.frame(id = 1:20) 
tmp$var <- list(values) 
tmp$var.int <- sapply(tmp$var, function(x) pasteC(utf8ToInt(pasteC(x)))) 
tmp 
+0

你好,非常感謝你的回答!現在,我將嘗試將數字矢量連接爲一個數字。例如,c(65,89,65,69,73,65,73,65,73,66,46)是矩陣中的元素之一。我想將其表示爲658965697365736646並將其解釋爲整數。那可能嗎? –