许多公司的日志返回计算r

时间:2017-06-02 07:31:32

标签: r logging return stock ln

我有这样的文件。

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(当前价格/先前价格)计算日志退货,我的预期输出是这样的

 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]))))) 

3 个答案:

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

答案 1 :(得分:0)

如果您对“失败”的意思更加准确,那将会很有帮助。例如,添加错误消息。在好问题上查看更多here

在任何情况下,我怀疑如果你用以下代码替换你的代码它应该有用。

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

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

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