数据帧上的 R 日志转换
R log-transformation on dataframe
我有一个数据框 (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 的东西,并自己创建转换函数。
非常感谢任何帮助。
这将计算盈利能力(假设数据在 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
我有一个数据框 (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 的东西,并自己创建转换函数。 非常感谢任何帮助。
这将计算盈利能力(假设数据在 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