【问题标题】:converting string to numeric matrix in r在r中将字符串转换为数字矩阵
【发布时间】:2017-11-14 07:33:52
【问题描述】:

我是 R 的初学者。我有一个名为 data_mat 的数据集。它只有二进制变量,即所有变量都有 0 或 1 作为值。它看起来像这样:

      Elderflower high low medium
 [1,]           0    1   0      0    
 [2,]           0    1   0      0    
 [3,]           0    1   0      0    
 [4,]           0    1   0      0

它是一个数字矩阵。在使用以下代码向其中添加另外 3 列(本质上也是二进制)时,它不再保持数字:

data_mat<-cbind(data_mat,datam[,c(5:6,9)])

执行上述代码后,数据现在如下所示:

      Elderflower high low medium Sugar Chewy Content
 [1,] "0"         "1"  "0" "0"    "1"   "1"   "1"    
 [2,] "0"         "1"  "0" "0"    "0"   "0"   "1"    
 [3,] "0"         "1"  "0" "0"    "1"   "1"   "1"    
 [4,] "0"         "1"  "0" "0"    "0"   "0"   "1"   

为了将此矩阵转换为数字,我运行了以下代码:

data11<-matrix(as.numeric(unlist(data_mat,use.names = 
TRUE)),nrow=nrow(data_mat))

这样,我的数据仍然是一个数字矩阵,但列名消失了。现在看起来像这样:

      [,59] [,60]
 [1,]     1     1
 [2,]     0     1
 [3,]     1     1
 [4,]     0     1

请建议我如何解决这个问题?动机是在将新列添加到现有数字矩阵后获得列名完整的数字矩阵。

【问题讨论】:

  • 您的问题是datam 似乎是一个字符矩阵。您应该调查为什么会这样并解决它。
  • dput()显示你的数据或者给出你的数据的定义!请阅读minimal reproducible examplestackoverflow.com/questions/5963269/…
  • @Roland 是的 datam 是一个字符矩阵。请让我知道我如何将此矩阵中的二进制列添加到另一个数字矩阵中,这样结果矩阵就是列名存在的数字
  • 那么datam应该是一个矩阵。它应该是 data.frame,因为与矩阵相比,data.frame 可以保存不同类型的数据。那你就不会有这个问题了。

标签: r string matrix numeric data-conversion


【解决方案1】:

使用定义的colClasses读取您的数据

data_mat <- read.table(path.to.data, header = TRUE, colClasses = "numeric")

这可确保您的数据是 numeric,并且您可以使用 cbind 按您的方式添加更多列。当然datam 也需要是数字的。作为副作用,定义colClasses 也会加快阅读过程。

【讨论】:

  • datam 既有二进制变量,也有字符串变量。我只想将二进制变量添加到我的矩阵中。由于字符串变量,我不会像你上面提到的那样导入我的数据。
  • 那么您必须为每一列定义类,例如:colClasses = c("numeric", "numeric", "character")
猜你喜欢
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 2019-09-15
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
相关资源
最近更新 更多