【问题标题】:R log-transformation on dataframe数据帧上的 R 对数转换
【发布时间】:2015-04-22 17:00:03
【问题描述】:

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

ln 是自然对数

Vi_t 是股票 i 在日期 t 的价值

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

具体来说,我想要的是 ln(1467.4/1507.5) 而不是 [2, "SMI"] 处的 1467.4,并且对于数据框中的所有其余值都相同。 由于我是 R 新手,所以我被卡住了。我正在考虑使用类似 mapply 的东西,并自己创建转换函数。 非常感谢任何帮助。

【问题讨论】:

    标签: r transformation stocks


    【解决方案1】:

    这将计算利润(假设数据在 data.frame 调用 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
    

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 2023-01-21
      相关资源
      最近更新 更多