将向量作为额外的xts文件列添加回来

时间:2014-10-19 16:02:55

标签: r xts

这是我第一次使用编码 - 不是在财务方面。只是想学习R。

我试图计算Google历史数据的收盘价差异。问题是要应用一个函数(我打赌有很多函数已经预先打包),我只能通过将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)

任何提示都将不胜感激。

2 个答案:

答案 0 :(得分:3)

无需为此创建自定义函数,xtsquantmod已经内置了矢量化函数来执行此操作。我想要的是这个:

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

答案 1 :(得分:0)

与此同时,我认为防止我遇到的问题的具体方法是将xts文件整体转换为data.frame(而不是分隔列向量);在data.frame上执行操作,在尾端将结果合并到原始xts。

这是一种可行的方式(注意:我给第一行的意思是,而不是&#34; NA&#34;):

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!