【问题标题】:how to read a dataframe as a matrix?如何将数据帧读取为矩阵?
【发布时间】:2016-04-19 00:19:55
【问题描述】:

我想将 csv 文件作为矩阵读取,并且该矩阵是数字的。 以下是我的代码

1、读取数据

mydata<-read.csv("mydata.csv", header = TRUE, sep=',', check.names = FALSE)
str(mydata)

2、转化为数值数据

mydata_1<-data.matrix(mydata)
str(mydata_1)

第一步,输出为fine

但是对于第二步,当我想将数据帧转换为数值矩阵时,输出变为如下。看到行名和列名已更改,并且单元格值也不正确,这是不想要的。

我也尝试了以下语法,但它产生了与上面相同的结果。

mydata_1<-sapply(mydata, as.numeric)

这是我的数据文件link of mydata的链接

欢迎提出任何建议。

【问题讨论】:

  • 我的猜测(我不会下载你的数据。你应该在没有外部数据链接的情况下提出问题reproducible)是你的数据是开始的因素。
  • 你试过read.csv(...,na.strings = "--")吗?
  • 您也可以在read.csv() 调用中尝试row.names = 1,将第一列设置为行名。附带说明:header = TRUEsep = ","read.csv() 中的默认值。你不需要写它们。
  • 谢谢@Marat Talipov。结合你和理查德的建议,它非常有效!非常感谢!
  • 谢谢@RichardScriven,它通过添加'row.names = 1'和'na.strings =“--”'来工作。非常感谢您的帮助!

标签: r csv matrix numeric


【解决方案1】:

这是因为您有多种数据类型(因子、num),而一个矩阵只能存储一种数据类型。我建议您删除第一列以仅包含数字:

mydata_1<-data.matrix(mydata[,-1])

【讨论】:

  • 谢谢@HubertL,但我需要国家名称作为行名,所以我无法删除它。这是第一个问题,第二个问题是`data.matrix()`函数会改变数据值的大小,这是不想要的。
  • 为什么要使用矩阵?
  • 谢谢@HubertL。你说的对。问题确实出在rownames上,所以通过添加'rowname= 1',问题就解决了。
猜你喜欢
  • 2018-08-05
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
相关资源
最近更新 更多