如何在R中创建财务回报矩阵

时间:2012-12-06 11:57:52

标签: 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

3 个答案:

答案 0 :(得分: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即可返回每列的滞后差异。

答案 1 :(得分: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)的结果除以x[-length(x)],即删除最后一个元素后的x。这可以确保您将差异除以前一个元素。
  3. 然后将其包装成apply,为每列执行此操作。

答案 2 :(得分: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