0

我有一个资产价格矩阵

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
4

3 回答 3

3

基于 Andrie 的回答,但不需要使用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将返回每列的滞后差异。

于 2012-12-06T12:46:56.540 回答
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. 然后我将结果除以diff(x)by x[-length(x)],即删除最后一个元素后的 x 。这可以确保您将差异除以前一个元素。
  3. 然后只需将其包装成对apply每一列执行此操作的 a 即可。
于 2012-12-06T12:10:17.163 回答
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)

这是一种简单有效的方法:

(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
于 2012-12-06T12:11:10.497 回答