【问题标题】:read.table returning character matrix, would like numericread.table 返回字符矩阵,想要数字
【发布时间】:2012-10-20 04:11:19
【问题描述】:

我有一个 csv 文件,其中的数据如下所示:

"Date","Time","Open","High","Low","Close","Up","Down","Sell","Buy","Stop1","Stop2","Stop3","Target1","Target2","Target3"
04/18/2012,1335,1365.25,1366.00,1365.00,1366.00,2855,1153,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
04/18/2012,1340,1366.00,1366.25,1365.50,1366.00,450,607,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
04/18/2012,1345,1366.00,1366.00,1365.75,1365.75,300,263,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00

如果我使用这个命令读取文件,我会得到一个字符矩阵:

RawData = as.matrix(read.table(PathName,sep=",",header=TRUE))

typeof(RawData)
[1] "character"

我可以说这是由于日期列。

我需要这是一个数字数组。我在上面使用的 read.table 命令有什么好的替代方法?

【问题讨论】:

  • 放下as.matrix,仔细阅读?as.matrix的详细信息部分。
  • 正如@Joran 刚才所说:as.matrix 是一个通用函数。如果有任何非(数字/逻辑/复杂)列,数据帧的方法将返回一个字符矩阵,将格式应用于非字符列。(来自 R 文档)那么为什么不直接使用一个子集(没有第一列)传递给后面的分析?
  • 另外,你想对数组做什么?

标签: r


【解决方案1】:
RawData.df <- read.table(PathName,sep=",",header=TRUE)
RawData <- as.matrix(RawData.df[,-1])

关于您的数据:

> RawData.df <- read.table(sep = ",", header = TRUE, text =
+ '"Date","Time","Open","High","Low","Close","Up","Down","Sell","Buy","Stop1","Stop2","Stop3","Target1","Target2","Target3"
+ 04/18/2012,1335,1365.25,1366.00,1365.00,1366.00,2855,1153,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+ 04/18/2012,1340,1366.00,1366.25,1365.50,1366.00,450,607,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00
+ 04/18/2012,1345,1366.00,1366.00,1365.75,1365.75,300,263,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00')
> str(RawData.df)
'data.frame':   3 obs. of  16 variables:
 $ Date   : Factor w/ 1 level "04/18/2012": 1 1 1
 $ Time   : int  1335 1340 1345
 $ Open   : num  1365 1366 1366
 $ High   : num  1366 1366 1366
 $ Low    : num  1365 1366 1366
 $ Close  : num  1366 1366 1366
 $ Up     : int  2855 450 300
 $ Down   : int  1153 607 263
 $ Sell   : num  0 0 0
 $ Buy    : num  0 0 0
 $ Stop1  : num  0 0 0
 $ Stop2  : num  0 0 0
 $ Stop3  : num  0 0 0
 $ Target1: num  0 0 0
 $ Target2: num  0 0 0
 $ Target3: num  0 0 0
> RawData <- as.matrix(RawData.df[,-1])
> str(RawData)
 num [1:3, 1:15] 1335 1340 1345 1365 1366 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:15] "Time" "Open" "High" "Low" ...

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 2018-10-10
    • 2022-01-08
    • 2014-01-14
    • 2023-03-03
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多