2014-10-19 81 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!