我是R的新手,刚刚开始使用它。我目前正在试验quantmod包。
quantmod包似乎完成了我想要做的大部分工作,但是,我不想使用getSymbols()函数将数据提取到R.相反,我想使用我自己的数据 - 存储为csv文件我的本地光盘。
我希望能够从我的CSV文件中篡改数据以与quantmod一起使用。我来了accros this article,它显示了如何读取用于quantmod的CSV文件,但我不喜欢它至少有两个原因:
在加载到quantmod之前,它会将新的(重新格式化的)CSV文件写入光盘。我宁愿在内存中做任何必要的修改,使用R。
CSV文件包含列标题。我的数据没有列标题。相反,字段位于预定的固定列位置(与Yahoo Finance数据表采用的标准格式相匹配)。
我还没有设法计算出 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
我做错了什么?
答案 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 对象应该是直截了当的。