0

我有一个这样的文件。

head(Historical_Stock_Prices_R)
    Date1     MSFT    AAPL   GOOGL
1 25-01-05 21.02985 4.873362 88.56
2 26-01-05 21.02177 4.886890 94.62
3 27-01-05 21.10259 4.913269 94.04

想用这个公式 ln(current price/previous price) 计算对数回报,我的预期输出是这样的

 Date1        MSFT   AAPL    GOOGL          
26-01-05    -0.04%  0.28%    6.62%
27-01-05     0.38%  0.54%   -0.61% 

试图通过此代码从先前的堆栈溢出答案中解决但失败

logs=data.frame( cbind.data.frame(newdates[-1], 

diff(as.matrix(log(Historical_Stock_Prices_R[,-1]))))) 
4

3 回答 3

0

如果您可以更准确地了解“失败”的含义,那将会很有帮助。例如,添加您的错误消息。在这里查看更多关于好问题的信息

无论如何,我怀疑如果您用以下代码替换您的代码,它应该可以工作。

logs=data.frame( cbind.data.frame(Historical_Stock_Prices_R["Date1",-1], diff(as.matrix(log(Historical_Stock_Prices_R[,-1]))))) 

您的代码失败的原因是您的环境中可能没有名为“newdates”的对象,因此您必须参考原始数据框。然后,您可以在之后重命名该列。

于 2017-06-02T08:29:45.340 回答
0

使用 TTR 包和 ROC

> library(TTR)
> stocks
     Date1     MSFT     AAPL GOOGL
1 25-01-05 21.02985 4.873362 88.56
2 26-01-05 21.02177 4.886890 94.62
3 27-01-05 21.10259 4.913269 94.04


> rocMSFT <- ROC(stocks[,"MSFT"])
> rocMSFT
[1]            NA -0.0003842896  0.0038372143

但也看看dailyReturn:从quantmod http://www.quantmod.com/documentation/periodReturn.html计算每日回报

于 2017-06-02T08:46:42.063 回答
0

尝试这个:

df = read.table(text="
Date1     MSFT    AAPL   GOOGL
1 25-01-05 21.02985 4.873362 88.56
2 26-01-05 21.02177 4.886890 94.62
3 27-01-05 21.10259 4.913269 94.04",header=T)

cbind.data.frame(date=df$Date1[-1],apply(df[,2:4],2,function(x) log(x[-1]/x[-length(x)])*100))

#       date        MSFT      AAPL      GOOGL
# 2 26-01-05 -0.03842896 0.2772061  6.6188582
# 3 27-01-05  0.38372143 0.5383395 -0.6148647
于 2017-06-02T08:23:17.777 回答