如何将CSV数据文件加载到R中以与quantmod一起使用

时间:2012-01-23 11:20:38

标签: r quantmod

我是R的新手,刚刚开始使用它。我目前正在试验quantmod包。

quantmod包似乎完成了我想要做的大部分工作,但是,我不想使用getSymbols()函数将数据提取到R.相反,我想使用我自己的数据 - 存储为csv文件我的本地光盘。

我希望能够从我的CSV文件中篡改数据以与quantmod一起使用。我来了accros this article,它显示了如何读取用于quantmod的CSV文件,但我不喜欢它至少有两个原因:

  1. 在加载到quantmod之前,它会将新的(重新格式化的)CSV文件写入光盘。我宁愿在内存中做任何必要的修改,使用R。

  2. CSV文件包含列标题。我的数据没有列标题。相反,字段位于预定的固定列位置(与Yahoo Finance数据表采用的标准格式相匹配)。

  3. 我还没有设法计算出 getSymbols()函数返回的数据类型。我期望它返回一个数据框,但是当我检查它的类时,它被识别为一个字符向量 - 我发现这非常令人惊讶(坦率地说,不相信,因为我能够从中绘制一个barChart变量中包含的数据):

    yhoo <- getSymbols("YHOO",src="google")
    class(yhoo)
    [1] "character"
    > yhoo
    [1] "YHOO"
    

    如果有人能够展示如何编写一个小型R函数(很可能是read.csv的包装器),我将不胜感激,它将从我的CSV文件中读取数据并将其作为R对象(数据框?)返回以供使用用quantmod。

    这是一些伪代码,解释了我想要做的事情:

    # in case I need some funcs here for creating data type returned by function
    library(quantmod) 
    
    loadCSVDataFile <- function(full_pathname){
        csvdata <- read.csv(full_pathname, header=FALSE,sep=",")
        dates <- csvdata[,1]
        op <- csvdata[,2]
        hi <- csvdata[,3]
        lo <- csvdata[,4]
        cl <- csvdata[,5]
        vol <- csvdata[,6]
        oi <- csvdata[,7]
    
        # Now combine columns into a data type that matches that returned by the
        # getSymbols() ....
        # return(dataset)
    }
    

    [[更新]]

    我让STLL无法使用到目前为止给出的答案来实现这一目标......:

    > gbpusd <- as.xts(read.zoo('/path/to/gbpusd.csv', header=FALSE))
    > class (gbpusd)
    [1] "xts" "zoo"
    > barChart(gbpusd)
    Error in `[.xts`(x, xsubset) : subscript out of bounds
    
    > gbpusd2 <- getSymbols.csv('gbpusd',,'/path/to/')
    Error in missing(verbose) : 'missing' can only be used for arguments
    > 
    > gbpusd2 <- getSymbols.csv('gbpusd',.GlobalEnv,'/path/to/')
    Error in missing(verbose) : 'missing' can only be used for arguments
    > 
    > 
    > gbpusd2 <- getSymbols.csv('gbpusd','.GlobalEnv','/path/to/')
    Error in missing(verbose) : 'missing' can only be used for arguments
    > 
    > gbpusd2 <- getSymbols.csv('gbpusd',env,'/path/to/')
    Error in missing(verbose) : 'missing' can only be used for arguments
    

    我做错了什么?

3 个答案:

答案 0 :(得分:4)

常见的习语是:

yhoo = as.xts(read.zoo("yhoo.csv",header=T))

如果要使用quantmod函数,则可以告诉getSymbols()使用csv文件。见http://www.quantmod.com/documentation/getSymbols.csv.html I.e。

getSymbols('yhoo',src='csv')

(我遵循了你的小写惯例,但请记住文件名区分大小写;目录默认为当前目录,可以使用dir参数明确指定,请参阅?getSymbols.csv

答案 1 :(得分:4)

我可以使它工作,但你必须确定你的设置需要哪些参数。

library(quantmod)

# create sample data
getSymbols("SPY")
write.zoo(SPY, file="SPY.csv", sep=",")

# set symbol lookup
setSymbolLookup(SPY=list(src="csv",format="%Y-%m-%d"))
# call getSymbols(.csv) with auto.assign=FALSE
spy <- getSymbols("SPY", auto.assign=FALSE)
barChart(spy)

答案 2 :(得分:1)

如果您在代码中包含ls(),则会发现您错过了一个变量:

yhoo <- getSymbols("YHOO", src = "google")
ls()
# [1] "yhoo" "YHOO"
class(yhoo)
# [1] "character"
class(YHOO)
# [1] "xts" "zoo"

因此getSymbols()创建了2个变量:字符向量&#34; yhoo&#34;和&#34; YHOO&#34;,类可扩展时间序列( xts )的对象,它扩展了 zoo 类,用于存储不规则的时间序列数据。

要查看文档,请使用:

?xts # or ?zoo

特别是, xts 的文档描述了 as.xts()函数,用于将矩阵转换为xts。从那里使用 read.csv read.table 读取您自己的CSV文件并转换为 xts 对象应该是直截了当的。