【问题标题】:Char Matrix to Numeric in RR中的字符矩阵到数字
【发布时间】:2016-11-29 20:10:13
【问题描述】:

我有一个 4 列和 20000 多行的数据矩阵,其中包含带有数字、大写字母、破折号和点的条目。我想将它们表示为它们的 ASCII 码、数字。我尝试了 strtoi、chartoraw 和 utf8toint 函数,但不断收到错误,主要是“要替换的项目数不是替换长度的倍数”。

如何在没有任何 NA 强制的情况下将整个矩阵转换为数值矩阵?

【问题讨论】:

标签: r matrix character ascii type-conversion


【解决方案1】:
> (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  

【讨论】:

  • 您好,感谢您的回答,它真的很有帮助!现在,我将尝试连接数字向量,作为一个数字。例如,c(65, 89, 65, 69, 73, 65, 73, 65, 73, 66, 46) 是矩阵中的元素之一。我想将其表示为 658965697365736646 并将其解释为整数。这可能吗?
【解决方案2】:

不确定您的问题,但如果您想将字符矩阵转换为数字,请考虑使用加密摘要。

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"

【讨论】:

  • 您好,谢谢您的回答!现在,我将尝试将列表中的数字组合为一个数字。例如,c(65, 89, 65, 69, 73, 65, 73, 65, 73, 66, 46) 是矩阵中的元素之一。我想将其表示为 658965697365736646 并将其解释为整数。这可能吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2023-03-03
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
相关资源
最近更新 更多