2014-10-19 65 views
1

这是我的第一次编码 - 而不是在财务上。试图学习R.添加一个向量作为额外的xts文件列

我试图计算谷歌历史数据收盘价格的差异。问题是要应用一个函数(我敢打赌,这个已经预先打包的函数有很多),我只能通过将xts文件的Adjusted price列转换成一个向量来实现。

我得到了我想要的东西,但现在我坚持了,我不能合并到XTS文件查找特定日期的载体:

getSymbols("GOOG") 
head(GOOG) 
z = as.vector(GOOG$GOOG.Adjusted) 

D2D = function (x) { 
       days = length(x) 
       delta = numeric(days) 
       for(i in 2:days){ 
        delta[i] <- (100*((x[i] - x[i - 1])/(x[i - 1]))) 
       } 
       delta 
} 
DELTA = D2D(z) 
summary(DELTA) 
GOOG_DELTA = append(0,DELTA) 
merge(GOOG,GOOG_DELTA) 

任何提示,将不胜感激。

回答

3

不需要为此定制一个自定义函数,xts和已经内置了矢量化函数来完成此操作。我的事情你正在寻找这样的:

merge(GOOG,Ad((GOOG-lag(GOOG,1))/(lag(GOOG,1)))) 
+0

谢谢。它必须更容易... – Toni 2014-10-19 18:07:10

0

在此期间,我想阻止我是有问题的非常具体的方法是,将XTS文件作为一个整体转换为data.frame(而不是分离列向量);在data.frame上执行操作,在尾部将结果合并到原始xt。

这里是一个可行的可行方法(注:我给平均到第一行,而不是“NA”):

getSymbols("GOOG") 
str(GOOG) #We start with an xts 
z = as.data.frame(GOOG$GOOG.Adjusted) 
head(z) 
D2D = function (x) { 
       days = nrow(x) 
       delta = numeric(days) 
       for(i in 2:days){ 
        delta[i] <- (100*((x[i,1] - x[i - 1,1])/(x[i - 1,1]))) 
       } 
       delta 
} 
DELTA = D2D(z) 
head(DELTA) 
DELTA[1]<-mean(DELTA) 
head(DELTA) 
summary(DELTA) 
GOOG_D2D = merge(GOOG,DELTA) 
str(GOOG_D2D) #And we end with an xts file!