創造的財務回報的矩陣我有資產價格如何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
的矩陣
創造的財務回報的矩陣我有資產價格如何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
的矩陣
使用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
此操作,因爲:
diff()
返回滯後差異x[-length(x)]
,即,x去除最後一個元素之後除以diff(x)
結果。這可以確保您將差異除以前一個元素。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)
下面是一個簡單而有效的方式做到這一點:根據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
,但並不需要使用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。
對於我們所知道的OP來說,已經有了一個矩陣。 ;) – GSee
也許2.應該是x [-length(x)],因爲我希望按照之前的資產值來劃分? – ManInMoon
@ManInMoon好的。你是對的。我會編輯答案。 – Andrie