我有一个资产价格矩阵
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
我有一个资产价格矩阵
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
基于 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
将返回每列的滞后差异。
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()
返回滞后差异diff(x)
by x[-length(x)]
,即删除最后一个元素后的 x 。这可以确保您将差异除以前一个元素。apply
每一列执行此操作的 a 即可。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