2012-12-06 29 views
0

創造的財務回報的矩陣我有資產價格如何R中

A,B 
12.1,33.5 
12.2,33.4 
12.3,33.5 
12.1,33.6 

我怎樣才能獲得財務回報爲基質使用像

RET(x) <- {(x-Previousx)/Previousx} # My pseudocode 

東西給

A,B 
0.0082,-0.0029 
0.008197,0.0029 
-0.0162,0.00298 
的矩陣

回答

2

使用diff()apply()

dat <- read.csv(text="A,B 
12.1,33.5 
12.2,33.4 
12.3,33.5 
12.1,33.6", header=TRUE) 
dat 


apply(dat, 2, function(x)diff(x)/x[-length(x)]) 
       A   B 
[1,] 0.008264463 -0.002985075 
[2,] 0.008196721 0.002994012 
[3,] -0.016260163 0.002985075 

此操作,因爲:

  1. 功能diff()返回滯後差異
  2. 我然後通過x[-length(x)],即,x去除最後一個元素之後除以diff(x)結果。這可以確保您將差異除以前一個元素。
  3. 然後,簡單地將其包含到apply中,即可爲每列執行此操作。
+0

也許2.應該是x [-length(x)],因爲我希望按照之前的資產值來劃分? – ManInMoon

+0

@ManInMoon好的。你是對的。我會編輯答案。 – Andrie

2
dat <- read.csv(text = "A,B 
12.1,33.5 
12.2,33.4 
12.3,33.5 
12.1,33.6", header = TRUE) 

下面是一個簡單而有效的方式做到這一點:根據Andrie的回答

(tail(dat, -1) - head(dat, -1))/head(dat, -1) 


      A   B 
2 0.008264463 -0.002985075 
3 0.008196721 0.002994012 
4 -0.016260163 0.002985075 
3

,但並不需要使用apply功能

diff(as.matrix(dat))/dat[-nrow(dat),] 
      A   B 
1 0.008264463 -0.002985075 
2 0.008196721 0.002994012 
3 -0.016260163 0.002985075 

diff可應用於一個矩陣,所以只需簡單地將dat轉換爲矩陣並應用diff就會返回滯後的d每列的ifference。

+0

對於我們所知道的OP來說,已經有了一個矩陣。 ;) – GSee