【问题标题】:Read.csv2 only imports factors or charctersRead.csv2 只导入因子或字符
【发布时间】:2017-04-12 12:52:35
【问题描述】:

我写了一个小程序通过 OnVista 导入 MSCI 世界数据(我在 yahoo Finance 上找不到):

library(fImport)
library(fBasiscs)

notation="3193857"
datestart=Sys.Date()-366
interval="Y1"

URL <- composeURL("www.onvista.de/onvista/boxes/historicalquote/export.csv?","notationId=", notation, "&dateStart=", datestart, "&interval=", interval )

data<-read.csv2(URL,header=TRUE,sep=";",dec=",",na.strings=c(""))

我的问题是,无论我在 read.csv2 函数中的命令,R 中的genearetd 表都有字符或因子。

我的想法是,这是因为第 254 行中导入了空单元格。但即使我将空单元格命令为 NA,这也不适用于整行,也不会影响数字列的导入。它们仍然表现为因子或字符。

谁能帮帮我?

【问题讨论】:

  • 嗨!您能否编辑您的信息并举例说明您正在获得什么以及您想要获得什么?这可能有助于我们回答您;有一些函数可以将因子转换为数字或其他什么,但如果没有具体的例子就很难回答。

标签: r


【解决方案1】:

您的问题不是缺少值,而是数字包含 1000s 分隔符这一事实。您可以阅读data.frame 并转换相关列,也可以按照以下链接之一的建议定义新的类定义:

这里我们定义了一个新类,它首先删除句点(1000 分隔符),然后将逗号转换为句点。

setClass("MyNum")
setAs("character", "MyNum", 
       function(from) as.numeric(gsub(",", ".", gsub("\\.", "", from) ) ))
indata <- read.csv2(URL, sep=";", dec=",", 
                    colClasses=c("character", rep("MyNum", 4), "numeric"))

这会导致

head(indata)
         Datum Eroeffnung    Hoch    Tief Schluss Volumen
1   11.04.2016    1632.14 1632.14 1632.14 1632.14       0
2   12.04.2016    1644.21 1644.21 1644.21 1644.21       0
3   13.04.2016    1666.16 1666.16 1666.16 1666.16       0
4   14.04.2016    1671.96 1671.96 1671.96 1671.96       0
5   15.04.2016    1670.46 1670.46 1670.46 1670.46       0
6   18.04.2016    1675.32 1675.32 1675.32 1675.32       0

类是

sapply(indata, class)
      Datum  Eroeffnung        Hoch        Tief     Schluss 
"character"   "numeric"   "numeric"   "numeric"   "numeric" 
    Volumen 
  "numeric" 

【讨论】:

  • 好吧,现在我收到另一个错误:我确实按照您的建议添加了一个:setAs("character", "MyNum", function(from) as.numeric( gsub("\\." , "" ,from) ) ) 现在会导致警告消息 In asMethod(object) : NAs 通过强制引入。我认为我没有为分隔符找到正确的标志。但我尝试了逗号和点....
  • 在 gsub 中使用逗号会删除逗号,但会以错误的格式留下数字,因为 R 认为,在将它们转换为数字时,点是小数点分隔符。在 gsub 函数中取点会导致所有四列中的 NA。
  • 嗯...那是因为我忘了复制>
猜你喜欢
  • 1970-01-01
  • 2017-06-09
  • 2017-12-21
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多