2015-04-22 177 views
2

我有一個數據幀(df)與不同股票在不同日期(t)的值(V)。我想在每個時間段都獲得一個新的盈利能力。 盈利爲:LN(Vi_t/Vi_t-1) 其中:對數據幀的R對數轉換

ln爲自然對數

Vi_t是股票我的在日期噸

Vi_t-1的值的值在日期相同的庫存之前

這是DF輸出[1:3,1:10]

 date SMI Bond ABB ADDECO Credit Holcim Nestle Novartis Roche 
1 01/08/88 1507.5 3.63 4.98 159.20 15.62 14.64 4.01  4.59 11.33 
2 01/09/88 1467.4 3.69 4.97 161.55 15.69 14.40 4.06  4.87 11.05 
3 01/10/88 1538.0 3.27 5.47 173.72 16.02 14.72 4.14  5.05 11.94 

具體而言,代替1467.4在[2,「SMI」]我想要的盈利能力是ln(1467.4/1507.5),對於數據框中的其餘所有值都是一樣的。 由於我是R新手,我被卡住了。我正在考慮使用類似mapply的東西,並自己創建轉換函數。 任何幫助是高度讚賞。

回答

0

這將計算利潤等(假設數據是在data.frame通話d):

(d2<- log(embed(as.matrix(d[,-1]), 2)/d[-dim(d)[1], -1])) 
#   SMI  Bond   ABB  ADDECO  Credit  Holcim  Nestle Novartis  Roche 
#1 -0.02696052 0.01639381 -0.002010051 0.01465342 0.004471422 -0.01652930 0..05921391 -0.02502365 
#2 0.04699074 -0.12083647 0.095858776 0.07263012 0.020814375 0.02197891 0.01951281 0.03629431 0.07746368 

然後,您可以添加日期,如果你想:或者

d2$date <- d$date[-1] 

,你可以使用一個apply基礎的方法:

(d2 <- apply(d[-1], 2, function(x) diff(log(x)))) 
#    SMI  Bond   ABB  ADDECO  Credit  Holcim  Nestle Novartis  Roche 
#[1,] -0.02696052 0.01639381 -0.002010051 0.01465342 0.004471422 -0.01652930 0..05921391 -0.02502365 
#[2,] 0.04699074 -0.12083647 0.095858776 0.07263012 0.020814375 0.02197891 0.01951281 0.03629431 0.07746368