对数据帧进行R对数转换

时间:2015-04-22 17:00:04

标签: r transformation stocks

我有一个数据帧(df),其中不同日期(t)的不同股票的值(V)。我想获得一个新的df,每个时期的盈利能力。 盈利能力为:ln(Vi_t / Vi_t-1) 其中:

ln是自然对数

Vi_t是日期时的股票i的值

Vi_t-1在

之前的相同股票的价值

这是df [1:3,1:10]

的输出
      date    SMI Bond  ABB ADDECO Credit Holcim Nestle Novartis Roche
1 01/08/88 1507.5 3.63 4.98 159.20  15.62  14.64   4.01     4.59 11.33
2 01/09/88 1467.4 3.69 4.97 161.55  15.69  14.40   4.06     4.87 11.05
3 01/10/88 1538.0 3.27 5.47 173.72  16.02  14.72   4.14     5.05 11.94

具体而言,代替1467.4 at [2,“SMI”],我希望盈利能力为ln(1467.4 / 1507.5),并且对于数据帧中的所有其余值都是相同的。 因为我是R的新手,我被困住了。我正在考虑使用像mapply这样的东西,并自己创建转换函数。 任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:0)

这将计算盈利能力(假设数据在data.frame call d中):

(d2<- log(embed(as.matrix(d[,-1]), 2) / d[-dim(d)[1], -1]))
#          SMI        Bond          ABB     ADDECO      Credit      Holcim     Nestle   Novartis       Roche
#1 -0.02696052  0.01639381 -0.002010051 0.01465342 0.004471422 -0.01652930 0.01239173 0.05921391 -0.02502365
#2  0.04699074 -0.12083647  0.095858776 0.07263012 0.020814375  0.02197891 0.01951281 0.03629431  0.07746368

然后,如果需要,您可以添加日期:

d2$date <- d$date[-1]

或者,您可以使用基于apply的方法:

(d2 <- apply(d[-1], 2, function(x) diff(log(x))))
#             SMI        Bond          ABB     ADDECO      Credit      Holcim     Nestle   Novartis       Roche
#[1,] -0.02696052  0.01639381 -0.002010051 0.01465342 0.004471422 -0.01652930 0.01239173 0.05921391 -0.02502365
#[2,]  0.04699074 -0.12083647  0.095858776 0.07263012 0.020814375  0.02197891 0.01951281 0.03629431  0.07746368