2013-08-02 87 views
0

我是R的新手,只是有一個簡單的問題。計算數據幀內的每日對數回報

我有一個數據框與時間序列財務數據,並希望計算某些列的日誌回報。當我試圖在表內使用diff(log())時,出現錯誤消息,表示返回的行與現有表不同。

這是因爲退貨總是低於我假設的原始價格數據。我知道我可以單獨計算回報率作爲一些新的數據框架,但我希望將回報與日期對齊。任何人都可以建議一種方法來解決這個問題? 我使用的代碼如下:

 Date MKT_ap MKT_us MKT_au 
1 2008-01-02 6237 14613.57 1424303  
2 2008-01-03 6161 14587.92 1418566 


> #compute market, stock and ADR returns 
> data$MR_au = with(data, diff(log(data$MKT_au))) 
Error in `$<-.data.frame`(`*tmp*`, "MR_au", value = c(-0.00403606867795503, : 
    replacement has 1226 rows, data has 1227 

回答

2

的問題是,你要創建不同長度的新列到你的原始數據幀。 (新列少了一個部件,因爲你正在服用的差異。)這樣做的

一個略顯笨拙的辦法是

z = with(data, diff(log(data$MKT_au))) 
data$MR_au = cbind(data, c(NA,z)) 
+0

謝謝djas的回答!但我認爲它不一定在第一行使用「with」命令,這可能會導致包括所有退貨在內的新列的輸入。我做了如下調整:> a = diff(log(data $ MKT_au)) > data $ MR_au = with(data,c(NA,a)) – cactussss

1

您可以在一個行做到這一點。你的方法與diff(log())幾乎是正確的。 使用

c(diff(log(data)),NA)

代替。這會計算對數回報並在最後添加一個NA,因爲您會丟失一個觀察值。將此添加到END而非系列的開頭很重要。